MySQL GROUP BY性能问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL GROUP BY性能问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1253字,纯文字阅读大概需要2分钟。
内容图文
![MySQL GROUP BY性能问题](/upload/InfoBanner/zyjiaocheng/907/a6ce9421911c48ff82bce267080fead6.jpg)
这是我正在执行的查询(没有一些不相关的联接):
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都是索引.
解决方法:
SELECT a.*,
(
SELECT c.id
FROM b
JOIN с
ON c.id = b.id_rubro
WHERE b.id_anunciante = a.id
-- add the ORDER BY condition to define which row will be selected.
LIMIT 1
)
FROM a
在b(id_anunciante)上创建索引,以便更快地工作.
更新:
这里不需要OUTER JOIN.
重写您的查询,如下所示:
SELECT a.*, c.id
FROM a
JOIN b
ON b.id_anunciante = a.id
JOIN c
ON c.id = b.id_rubro
WHERE a.id = 1
UNION ALL
SELECT a.*, 1
FROM a
WHERE EXISTS
(
SELECT NULL
FROM c
JOIN b
ON b.id_rubro = c.id
WHERE c.id = 1
AND b.id_anunciante = a.id
)
内容总结
以上是互联网集市为您收集整理的MySQL GROUP BY性能问题全部内容,希望文章能够帮你解决MySQL GROUP BY性能问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。