limit语句查询优化

2020-04-14  本文已影响0人  吕艳凯
limit语句查询
SELECT * FROM acpf_bt_questions limit 0,20
SELECT * FROM acpf_bt_questions limit 2000000,20

分页查询一般使用(页数-1)* 页数据量得到偏移量
在limit查询中,是先找到偏移量所在行,然后在查询返回所需结果集行数
当偏移量慢慢增大,找到偏移量所在行需要扫描的数据就会越多,响应的就会越来越慢,当有几百万条上千万条数据时,时间开销非常的大

如何进行优化?

使用子查询的方式优化
偏移量查询放在子查询中,使用覆盖索引提高查询效率,子查询得到起始id
在外部查询,直接指定了起始id范围,避免了大量扫描数据,从而优化了查询效率

SELECT * FROM acpf_bt_questions WHERE id >= (select id from acpf_bt_questions limit 2000000,1) limit 20

当然也可以利用查询连表的方式,原理一样

需要注意的是:
只使用limit的时候,取出来的结果集数据是乱序的
用order by id <DESC>即可解决
另外:当order by 对含有相同值列排序时,会出现乱序现象,需要使用id自增主键排序
具体可参见:https://www.jianshu.com/p/66bfc73bfe05

上一篇下一篇

猜你喜欢

热点阅读