每个表JOIN的WHERE子句减慢了查询速度

时间:2017-01-11 20:03:41

标签: php mysql sql-server laravel laravel-query-builder

所以我需要加入三张桌子。

$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子句会使查询变慢。

如何优化此查询?

1 个答案:

答案 0 :(得分:0)

如果您在6k行中看到这种性能下降,唯一的原因可能是您的表上没有索引。如果您要在is_deleted上过滤结果集并将其加入某些id或其他id,则需要在这些字段上添加索引。每个表上可能有一个复合索引,其中包含相关的is_deleted字段和a字段。同样,可能需要每个id的{{1}}表的索引。