作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我的查询速度相对较快,约为 0.5 秒,但当我添加 ORDER BY 子句时,它会跳到将近 30 秒。
原始查询:(在约 0.5 秒内返回)
SELECT table1.*,table2.* FROM table1 LEFT OUTER JOIN table2 ON table1.column2=table2.column3 WHERE table1.column1='value' LIMIT 4
使用 ORDER BY 查询:(大约 30 秒后返回)
SELECT table1.*,table2.* FROM table1 LEFT OUTER JOIN table2 ON table1.column2=table2.column3 WHERE table1.column1='value' ORDER BY table1.column4 DESC LIMIT 4
请注意,我向 ORDER BY 使用的列添加了一个索引,但它没有任何改变。
关于导致这种情况的原因有什么想法吗?
最佳答案
这需要更长的时间,因为查询不能只选择它找到的前 4 个项目。它必须对整个列表进行排序,然后从中选择前 4 个。
通过添加一个包含 table1{column4, ...} 的索引来解决这个问题。如果您只需要表 1 中的几列(而且它们很窄),我会将它们添加到索引 ( covering index ) 中。
如果索引正确,SQL 引擎可以只提取您想要的前四列,而不是整个集合。
如果您确实有索引但没有帮助,请使用 EXPLAIN 运行查询查看执行计划的样子(好提示,@IronGoofy):
EXPLAIN
SELECT table1.*,table2.*
FROM table1
LEFT OUTER JOIN table2 ON table1.column2=table2.column3
WHERE table1.column1='value' ORDER BY table1.column4 DESC LIMIT 4
关于mysql - 向 MySQL 查询添加 ORDER BY 子句使其在 ~30 秒内返回,高于 ~0.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/447083/
我是一名优秀的程序员,十分优秀!