一般,我们在做分页时,用的是语句如下:
select * from table LIMIT 5,10; #返回第6-15行数据
但是,如果数据量很大,比如>1000万,则利用以上的查询会非常慢,可以利用以下语句进行优化:
Select * From table Where ID>=(
Select ID From table order by ID limit 90000,1
) order by ID limit 100;
注意:内层排了序,外层查询也需要排序
以上语句内外查询用的都是id(主键)来查询的,查询感受可能有时没有太大。
实测以下语句,
表记录总数:64万条
需求:按时间倒序查询10条记录
说明:id为主键,t_create列没有索引。
优化前:
select * from table order by t_create desc limit 10;
大约耗时446ms。
优化后:
select * from table where id > (
select id from table order by id desc limit 10, 1
) order by t_create desc limit 10;
大约耗时20ms以内。
性能提升20倍。
详细信息,请参考: