关于 mysql 加了 limit 反而变慢的问题?

发布时间 2023-04-21 17:50:47作者: 甜菜波波

SELECT * FROM pre_forum_post WHERE tid=6584344 AND `inv`='0' AND `uid`='6547981' ORDER BY dateline DESC limit 4

;

上面一条正常执行需要 16-20 秒.

SELECT * FROM pre_forum_postWHERE tid=6584344 AND `inv`='0' AND `uid`='6547981' ORDER BY dateline DESC ;

下面的只需要 0.2 秒左右。请大神帮帮忙.

 

 

 

走的索引不一样,  第一个 key 是 dateline,  第二个是 authorid,  根据业务建议优化一下索引. 

WHERE + ORDER BY的索引优化,形如:
SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [value] ORDER BY [sort];
建立一个联合索引(columnX,sort)来实现order by 优化。

 

回复 @ffvsnn520 : Extra信息不完整, 看看有没有 filesort.  


mysql对语句优化的时候, 选择了不同的索引,  因为你没有 联合索引,所以 当 where 后面走了索引的时候(比如你说的主键), order by 则不会走索引, 如果你的结果集很大, filesort 也会很漫长...


如果mysql走了 order by 索引,那么where就不会走索引,如果你的sql在查询上需要花大量时间,而结果集filesort排序很快的话,那么没走where索引的查询就会非常慢...


所以建议就是 尽量让 where 和 order by 都走索引... 

 
转自:https://www.oschina.net/question/1269003_153551