mysql – 连接表性能的ORDER BY列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 连接表性能的ORDER BY列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1108字,纯文字阅读大概需要2分钟。
内容图文
![mysql – 连接表性能的ORDER BY列](/upload/InfoBanner/zyjiaocheng/902/8bfa1f0b691040d89287715f4693b2a0.jpg)
我有1个1:1关系的表(但它可能在将来可能成为1:N关系),如下所示:
CREATE TABLE article (
article_id INT,
inserted DATETIME
) ENGINE InnoDB;
CREATE TABLE article_top (
article_top_id INT,
article_id INT,
until DATETIME
) ENGINE InnoDB;
我需要做的是选择首先由article_top.until DESC排序的文章,然后按article.inserted DESC排序(因此“顶部”文章位于顶部,其余文章从最新到最旧排序).
我执行以下查询,这很慢(当我跳过ORDER BY子句中的article_top.until时快速):
SELECT * FROM article
LEFT JOIN article_top
ON article.article_id = article_top.article_id
ORDER BY article_top.until DESC, article.inserted DESC
LIMIT 20
除了将两个表合并为单个表(丢失1:N关系的可能性)之外,我还能做些什么来优化查询?
我正在考虑在表文章中添加额外的列并使用触发器来更新它.这样我可以为两列添加索引,并且排序应该更快.
有没有其他方法如何优化查询?
谢谢
解决方法:
将top_until列添加到article表并从article_top表复制其值(在插入时手动或使用触发器),并提供不在article_top表中的文章零“top_until”值.然后在top_until和inserted列上有一个多列索引:
INDEX( top_until, inserted )
并查询如下:
SELECT * FROM article
ORDER BY top_until DESC, inserted DESC
LIMIT 20
这应该立即给出结果.
内容总结
以上是互联网集市为您收集整理的mysql – 连接表性能的ORDER BY列全部内容,希望文章能够帮你解决mysql – 连接表性能的ORDER BY列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。