前言
在mysql中limit可以实现快速分页,但是如果数据量大时limit必须优化才能有效的合理的实现分页了。当一个表
有几百万的数据的时候成了问题!如 select name from t limit 0,10 这个没有问题 当 limit 200000,10 的时候数据读取就很慢。
limit10000,10的意思扫描满足条件的10010行,扔掉前面的10000行,返回最后的10行,问题就在这里。
1 | LIMIT 450000 , 30 扫描了45万多行,所以查询变得很慢。 |
总结
当一个数据库表过于庞大,LIMIT offset, length中的offset值过大,则SQL查询语句会非常缓慢,需增加order by,
并且order by字段需要建立索引。如果使用子查询去优化LIMIT的话,则子查询必须是连续的,某种意义来讲,子查询不应该有where条件,
where会过滤数据,使数据失去连续性。如果查询的记录比较大,并且数据传输量比较大,比如包含了text类型的field,则可以通过建立子查询。