业务问题 一个页面刚进入时数据按时间排序 但是无法走索引?

业务上经常有查询分页数据的页面,刚进去是没查询条件的就像下列sql语句

select * from table order by [sort]

这种方式即使sort字段加了索引也是失效的,数据一多不就很慢吗,请问有什么解决方案吗

阅读 1.7k
2 个回答

上述的sql是查询全表全字段数据,并进行排序

这种情况尽管对排序字段做了索引,但是由于是查询全表全字段mysql优化器会觉得不走索引并对其排序更快(因为如果走排序字段索引,还需要每次都回表来获取其他字段的数据,效率更低)

但是如果你的sql是 select [排序字段] from table order by [排序字段]

那么是会走排序字段索引的,因为你只查询排序字段,那么通过该索引就已经可以拿到这个结果了,并且效率极高


回到楼主的问题:在刚进去的时候,一般是要获取第一页的数据(如前10条),那么sql语句应该是 select * from table order by 排序字段 limit 0, 10

由于只查询10条数据,这样mysql优化器会自己判断是否走排序字段索引还是不走排序字段索引(即哪一种方式效率更高)

在数据量较大的情况下,是会走排序字段索引的,因为只需要回表10次即可

mysql 用不用索引取决于『成本计算』,当用索引不如全表扫描划算的时候,就全表扫描

解决你的问题很简单,加个 limit

select * from table order by [sort] limit 10

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