假设您有类似的查询
SELECT
t1.c1,
t2.c2,
... more fields from joins ...
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
... more joins ...
GROUP BY t1.field
WHERE ...
而且您遇到了性能问题,并且您认为您已经涵盖了此类查询的所有常见优化ON
,例如在,GROUP BY
等中的列上定义索引WHERE
。但它仍然非常慢。
假设您有类似的查询
SELECT
t1.c1,
t2.c2,
... more fields from joins ...
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
... more joins ...
GROUP BY t1.field
WHERE ...
而且您遇到了性能问题,并且您认为您已经涵盖了此类查询的所有常见优化ON
,例如在,GROUP BY
等中的列上定义索引WHERE
。但它仍然非常慢。
检查您的所有联接是否都是实际表而不是视图!
我知道这是相当明显的陈述,但它难住了一段时间,因为我刚刚忘记了其中一个连接是视图。
这是一个在我自己找到答案之前我没有问过的问题,但我想发帖以帮助其他有同样问题的人,因为在任何其他关于优化 GROUP BY 查询的帖子中都没有提到这个问题与 JOIN。我不确定这是否在 SO 上被接受,但我也在这篇文章中添加了接受的答案,所以如果管理员想删除这篇文章,我不会被冒犯。