PRELOADER

当前文章 : 《MYSQL分页limit速度太慢优化方法》

5/5/2019 —— 

前言

  在mysql中limit可以实现快速分页,但是如果数据量大时limit必须优化才能有效的合理的实现分页了。当一个表
有几百万的数据的时候成了问题!如 select name from t limit 0,10 这个没有问题 当 limit 200000,10 的时候数据读取就很慢。
limit10000,10的意思扫描满足条件的10010行,扔掉前面的10000行,返回最后的10行,问题就在这里。

1
2
3
4
5
6
7
8
9
10
11
12
13
LIMIT 450000 , 30 扫描了45万多行,所以查询变得很慢。
但是如果之前记录了最大ID,就可以在这里做文章
例:
日常分页SQL语句

select name from t order by id asc limit 100000,20

扫描100020
如果记录了上次的最大ID

select name from t where id>100020 order by id asc limit 20

扫描20行。

总结

  当一个数据库表过于庞大,LIMIT offset, length中的offset值过大,则SQL查询语句会非常缓慢,需增加order by,
并且order by字段需要建立索引。如果使用子查询去优化LIMIT的话,则子查询必须是连续的,某种意义来讲,子查询不应该有where条件,
where会过滤数据,使数据失去连续性。如果查询的记录比较大,并且数据传输量比较大,比如包含了text类型的field,则可以通过建立子查询。