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

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

 

posted @   甜菜波波  阅读(487)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-04-21 mybatis all elements are null
2022-04-21 mac安装配置maven
2016-04-21 在多线程中使用静态方法是否有线程安全问题
2016-04-21 多线程并发
2016-04-21 消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ
2016-04-21 通过RealProxy实现AOP
2016-04-21 分布式事物嵌套事物
点击右上角即可分享
微信分享提示