【问题标题】:WHERE clause for each Table JOIN slowing down query每个 Table JOIN 的 WHERE 子句减慢查询
【发布时间】:2017-05-26 18:26:49
【问题描述】:

所以我需要加入三个表。

$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 子句会大大降低查询速度。

如何优化这个查询?

【问题讨论】:

  • 澄清一下,这不是 Eloquent。这是查询生成器。
  • 感谢指正

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-10-15
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    相关资源
    最近更新 更多