业务上经常有查询分页数据的页面,刚进去是没查询条件的就像下列sql语句
select * from table order by [sort]
这种方式即使sort字段加了索引也是失效的,数据一多不就很慢吗,请问有什么解决方案吗
业务上经常有查询分页数据的页面,刚进去是没查询条件的就像下列sql语句
select * from table order by [sort]
这种方式即使sort字段加了索引也是失效的,数据一多不就很慢吗,请问有什么解决方案吗
mysql 用不用索引取决于『成本计算』,当用索引不如全表扫描划算的时候,就全表扫描
解决你的问题很简单,加个 limit
select * from table order by [sort] limit 10
2 回答694 阅读✓ 已解决
1 回答819 阅读✓ 已解决
1 回答742 阅读✓ 已解决
1 回答509 阅读✓ 已解决
2 回答840 阅读
1 回答967 阅读
1 回答727 阅读
上述的sql是
查询全表全字段数据,并进行排序
这种情况尽管对排序字段做了索引,但是由于是
查询全表全字段
,mysql优化器
会觉得不走索引并对其排序更快
(因为如果走排序字段索引
,还需要每次都回表
来获取其他字段的数据,效率更低)但是如果你的sql是
select [排序字段] from table order by [排序字段]
那么是
会走排序字段索引
的,因为你只查询排序字段,那么通过该索引就已经可以拿到这个结果了,并且效率极高回到楼主的问题:在刚进去的时候,一般是要获取第一页的数据(如前10条),那么sql语句应该是
select * from table order by 排序字段 limit 0, 10
由于只查询10条数据,这样mysql优化器会
自己判断
是否走排序字段索引还是不走排序字段索引(即哪一种方式效率更高)在数据量较大的情况下,是会走排序字段索引的,因为只需要回表10次即可