每个 Table JOIN 减慢查询的 WHERE 子句
WHERE clause for each Table JOIN slowing down query
所以我有三个 table 需要加入。
$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();
问题是我的 table 上有 6,000 多行并且每个 table 都有 where 子句会大大减慢查询速度。
如何优化此查询?
如果您在 6k 行时看到这种性能下降,唯一的原因可能是您的 table 上没有索引。如果您要过滤 is_deleted
上的结果集并在某些 id
或其他上加入它,您需要在这些字段上有索引。可能每个 table 上有一个复合索引,具有相关的 id
字段和 is_deleted
字段。同样,可能需要每个 ID 在 a
table 上的索引。
所以我有三个 table 需要加入。
$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();
问题是我的 table 上有 6,000 多行并且每个 table 都有 where 子句会大大减慢查询速度。
如何优化此查询?
如果您在 6k 行时看到这种性能下降,唯一的原因可能是您的 table 上没有索引。如果您要过滤 is_deleted
上的结果集并在某些 id
或其他上加入它,您需要在这些字段上有索引。可能每个 table 上有一个复合索引,具有相关的 id
字段和 is_deleted
字段。同样,可能需要每个 ID 在 a
table 上的索引。