当前位置:  开发笔记 > 编程语言 > 正文

将ORDER BY子句添加到MySQL查询使其在约30秒内返回,从~0.5开始

如何解决《将ORDERBY子句添加到MySQL查询使其在约30秒内返回,从~0.5开始》经验,为你挑选了1个好方法。

所以我的查询在~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正在使用的列,它没有任何改变.

关于什么会导致这个的任何想法?



1> Michael Hare..:

这需要更长的时间,因为查询不能只选择它找到的前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

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有