一 简介:今天咱们来聊聊mysql的分页查询
二 语法
LIMIT [offset,] rows
offset是第多少条
rows代表多少条之后的行数
性能消耗
select * from table limit 0,10;
select * from table limit 1000,10;
很快
select * from table limit 3000000,10;
非常慢了
三 优化
原因:比如你要查询 300w开始后面10条数据;mysql会读取300w加10条这么多的数据,只不过 过滤后返回最后10条而已!!!所以导致分页查询越到后面越慢
1 直接使用select本身进行查询,并不进行任何优化
SELECT * FROM 表名称 LIMIT M,N
select * from table limit 3000000,10
2 采用唯一性索引(最好是主键)进行范围限定再进行分页处理
改写后
select * from table where id>3000000 limit 10;
3 按照索引分页后回表读取行的方式
改写后
select table.* from table inner join ( select id from table limit 3000000,10 ) as tmp on tmp.id=table.id;
4 限定查询范围,锁定页数
select * from table limit 1000,10; 只限定页
四 总结
对于无法通过优化解决的分页查询,建议通过1 减少表数据量 2 减少查询频率 3 设置读写分离进行解决