首页> 数据库> mysql的limit不要这样用

[文章]mysql的limit不要这样用

收藏
0 91 0

我们做的大部分系统都会涉及到与数据库数据的交互。在数据量比较大时,为了性能和交互的友好,就需要做分页查询了。

 

如果是mysql数据库的话,做分页查询大家就离不开使用limit了。

 

 

比如我们要对表“coder”中的数据做分页查询,每页20条数据。那程序生成的查询第一页的数据的sql会是下面这样。

 

 

而查询第二页时,生成的查询sql语句就是下面这样。

 

 

以此类推。

 

如果数据量不是太大时,通过上面的limit的方式做分页是没有问题的。

 

但是今天要对大家说的就是,这样的limit的方式在有的时候是有问题的。问题就是在数据量很大时,随着越往后翻页limit的两个参数中的第一个参数也会越大,sql的执行耗时也会越来越大。

 

因为limit的两个参数中的第一个是表示偏移量的,也就是要跳过多少条数据,这个过程随着要跳过的数据量的增大,是非常耗费时间的。

 

那这种情况要怎么处理呢?

 

这里就可以用到主键索引了,可以像下面这样写sql语句。

 

查询第一页时,sql是下面这样。

 

 

或者

 

 

而以后的每一页查询时,都需要依靠前一页的最大(如果是降序的话,就是最小)id值。假设上一页最大的id值是9527,那查询下一页的SQL语句就会是下面这样。

 

 

通过这样的方式,就能准确的命中索引,并从索引位置获取指定条数数据,就搞笑很多了。

数据库
最近热帖
{{item.Title}} {{item.ViewCount}}
近期热议
{{item.Title}} {{item.PostCount}}