所以我的查询在~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中的几列(并且它们很窄),我会将它们全部添加到索引(覆盖索引).
如果索引正确,SQL引擎可以只提取您想要的前四列 - 而不是整个集合.
如果你确实有索引并且它没有帮助,请使用EXPLAIN运行查询以查看执行计划的样子(好的提示,@ IroGoofy):
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