mysql分页是排序卡死

如:

select * from table where status=4 order by create_time desc limit 20,20

这样查询会导致数据库直接卡着,没结果出来。 如果把 order by create_time desc去掉,就秒出来。
后来不断尝试发现,只有当分页到最后一页,数据不满足20条的时候就会这样。否则还是很快。 这张表的记录条数是300w。

阅读 3k
3 个回答

(status, create_time)有索引就会快很多的。

没索引的话就是全表扫描,在所有结果集中做排序(排序可是O(n log n)量级的),记录多了就不可忍受。

在order by字段建索引

(status, create_time)建复合索引
单排序字段加索引也是要扫全表的,只不过是因为你有limit没有扫描全部记录而已
另外只有最后一页才慢你要看下是不是按照时间排序以后最后一部分status=4的记录很少
如果很少的话就意味着mysql需要扫描大量的记录才找到几条满足条件的记录
这也是数据分布不均衡会导致执行计划不准的原因

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题