【发布时间】:2010-01-22 18:14:26
【问题描述】:
这是我正在执行的查询(没有一些不相关的联接):
SELECT a.*, c.id
FROM a
LEFT OUTER JOIN b ON a.id = b.id_anunciante
LEFT OUTER JOIN c ON c.id = b.id_rubro
GROUP BY a.id
“a”的每一行都与“b”中的1到5行链接。
问题在于 GROUP BY 存在性能问题(使用 GROUP BY 比不使用它需要 10 倍或更多)。我只需要检索“a”中每个成员的一行。
我怎样才能加快速度?
编辑:我需要能够按 a.id 和/或 c.id 进行过滤。我应该得到的结果集是每个“a”的“有效”成员只有 1 行,这意味着与约束匹配的行。不应返回与过滤器不匹配的行。 在我的原始查询中,这将是这样完成的:
SELECT a.*, c.id
FROM a
LEFT OUTER JOIN b ON a.id = b.id_anunciante
LEFT OUTER JOIN c ON c.id = b.id_rubro
WHERE c.id = 1
OR a.id = 1
GROUP BY a.id
a.id、b.id_anunciante、b.id_rubro、c.id都是索引。
【问题讨论】:
标签: mysql performance group-by