###分页查询优化
分页查询在 mysql 中常遇到,如以下语句
select * from TableName limit 100,20;
用时大约需要0.03 sec。用时很短。
但是随着偏移量的增加,查询时间也随之增加。比如如下代码:
select * from TableName limit 10000000,20
用时大约需要32.43 sec,这个时间是不是就有点长了了?可以优化吗?答案是可以的。那么,该怎样优化?
- 优化方法1
select * from TableName order by id limit 10000000,20;
用时大约需要17.71 sec,还是有点长。
- 优化方法2
select * from TableName where id >= (select id from TableName order by id limit 10000000,1) limit 20;
用时大约需要4.01 sec。
- 优化方法3
select * from TableName a, (select id from TableName where status=1 order by id limit 10000000,10) b where a.id=b.id
用时大约需要4.43sec。
- 优化方法4
select * from TableName as a inner join (select id from TableName order by id limit 10000000,20) as b on a.id=b.id order by a.id;
用时大约需要3.98sec。
可见优化方法2、优化方法3 和 优化方法4 运行时间差不多,相比于32.43 sec,效率提高八倍左右。
注:sql 语句中的 TableName指代的工作中一个有40000000多万记录的表。