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
网友评论