2017-01-11 14 views
0

私は3つのテーブルが必要です。各テーブルのWHERE句クエリが遅くなります

$query = Table::where('a.is_deleted', 0) 
     ->where('b.is_deleted', 0) 
     ->where('c.is_deleted', 0) 
     ->leftjoin('b', 'b.mother_id', '=', 'a.mother_id') 
     ->leftjoin('c', 'c.material_group_id', '=', 'a.material_group_id') 
     ->get(); 

問題私のテーブルには6,000以上の行があり、各テーブルのwhere句を使用すると、クエリが大幅に遅くなります。

このクエリを最適化するにはどうすればよいですか?

+0

明確にするために、これは優雅ではありません。これはクエリビルダです。 – Ohgodwhy

+0

訂正ありがとう – raz

答えて

0

わずか6k行でこのようなパフォーマンスの低下が見られる場合は、テーブルにインデックスがないことが原因です。 is_deletedの結果セットをフィルタリングし、それをidまたは他のメンバーに参加させる場合は、それらのフィールドにインデックスを付ける必要があります。おそらく関連するidフィールドとis_deletedフィールドを持つそれぞれのテーブルの1つの複合インデックス。同様に、各IDのaテーブルのインデックスが必要になる場合があります。

関連する問題