2016-03-21 11 views
0

私はLaravel 5.1でAsgard CMSを使用しています。Laravel 5.1とAsgard CMS、長いクエリ実行時間

私のモデルであるNewsには、約1800のエントリがあり、データベースから取得するのに最大15秒かかります。

フロントエンドでは、1〜50のエントリを取得できます。しかし、バックエンドで、私はそれらをすべて取ると、結果はイライラしています。

ニュースモデルはカテゴリ、タグ、画像の3つの関係を使用します。また、ニュースとともに、これらのモデルにはすべて翻訳モデルとリレーションシップがあります。

私はNewsに関連するすべての表に索引を付けました。 SSDストレージ(VPS)を搭載した3コア4コアサーバーにアップグレードしました。今は何も働かない。

このプロセスを迅速に行うためのアイデアはありますか?

+1

デバッグバーを使用していますか? Asgard CMSは1回のページ訪問で何DBクエリを生成しますか? –

+0

@AlexeyMezeninそれは5784の質問を言う。 – yenerunver

+0

何かがひどく間違っています....あなたの質問には十分な情報がありません – Chris

答えて

2

CMSは、1回のページ訪問で5784のクエリを生成すると言っています。それは膨大な数であり、あなたは間違いなくあなたの質問を書き直すべきです。

Eager Loadingについては、お勧めします。手動でクエリを書き換えたり(私はアスガルドCMSに慣れていないので、私はここであなたを助けることができない)チューニングするためにあなたのCMSを試みることができる:

このループは、書籍のすべてを取得するために、1つのクエリを実行します テーブルでは、各書籍の別のクエリを使用して著者を取得します。したがって、 に25冊の書籍がある場合、このループでは、元の 本の場合は1、各書籍の著者を取得する場合は25の追加クエリが26回のクエリを実行します。

ありがたいことに、私たちは熱心な負荷を使用して、この操作を2つのクエリ に減らすことができます。

+0

Eager Loading後のデバッガの結果 - ビュー:70クエリ116 116.84s 77.5MB 116件のステートメントが実行され、11件が重複しました – yenerunver

0

モデルにEager Loadingを適用した後、私は5879から117にクエリを落としました。また、クエリ時間も17秒から13秒に短縮されました。

これは進歩ですが、それだけでは不十分です。

ちょうど1800のエントリを取得するためにこれをはるかに長く取るべきではありません。私は他のプロジェクトで、その時に何百万というものを手に入れました。

提案がありますか?探すべきポイントは?

関連する問題