Mysql大数据量分页查询优化 1、常规方式 2、子查询利用索引 3、利用BETWEEN..AND..
直接使用LIMIT,适用数据量少的情况
缺点:全表扫描,速度很慢,Limit限制的是从结果集的M位置处取出N条输出,其余抛弃。
Demo:测试了千万级数据,分页查询1000万以后的分页,用时十几秒
select * from order_shopcart order by id limit 10000000,10
2、子查询利用索引
子查询利用索引,查看执行计划,已经不是全表扫描了,执行计划的type是range、index
以下两种方式类似,用时3秒多,已经快了很多
Demo1:
select * from order_shopcart where id>(
select ID from order_shopcart order by id limit 10000000,1) limit 10
Demo2:
SELECT *
FROM (SELECT `ID` AS `ID_1` FROM `order_shopcart` ORDER BY ID LIMIT 10000000,10) AS `t`
JOIN `order_shopcart` ON `t`.`ID_1`=`order_shopcart`.`ID`
3、利用BETWEEN..AND..
最快的方式,执行计划的type是range
缺点:查询字段的数据必须要连续的,如果数据不是连续的话,只能用上面的方式
Demo:用时0.18秒!
select * from order_shopcart where id BETWEEN 10000000 AND 10000010 order by id;