关于 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 都走索引...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 分布式事物嵌套事物