我有一个查询性能很差,我不知道问题出在哪里。下面是一个大大简化的查询版本,但仍然显示相同的问题:
SELECT members.id,
FROM members
LEFT JOIN ( SELECT
member_id,
GROUP_CONCAT(hobby)
FROM member_hobbies
GROUP BY member_id) AS hobbies
ON member.id=hobbies.member_id
上有一个主索引members.id
, 上有一个匹配索引hobbies.member_id
。
如果我删除它,GROUP_CONCAT
查询速度将提高约 50 倍。
我知道上面给出的示例可以简化并且不需要子查询,并且我正在尝试简化我的完整查询。
我想知道是否有可能以当前形式优化查询以及问题出在哪里。
我认为性能问题是由于子查询没有索引,所以与子查询的连接很慢。因此,你可以通过将子查询结果存储在临时表中,然后为其添加索引来改进它。
删除时速度很快的原因
GROUP_CONCAT
是查询规划器意识到它可以直接连接member_hobbies
而不是执行子查询,因此它使用member_id
索引。