当前位置:首页> PHP教程> PHP&MYSQL
关键字
文章内容
php中mysql使用limit参数1数字越大效率越低
 
 
修改时间:[2012/08/30 21:03]    阅读次数:[1707]    发表者:[沩筱]
 

这两天有点空了,开始反思一下自己的收获,后面会陆续把一些值得记忆的问题记录下来。

刚开始搞mysql的时候,遇到一个导数据的需求,需要分页取出总共几十万的数据来做一些处理,于是写了一个依赖于mysql的limit来分页的程序了事。提交sql审核的时候却被打回来了。伪代码大致如下。

a=0

while(count){

 list = select * from table where xxx  limit a,PAGESIZE

 count = list;

 a=a+PAGESIZE;

}

   刚开始怎么也没想到这么简单的程序会有问题,DBA同学便给我演示了一下语句的执行时间,随着limit后面第一个值的增大,查询的时间开始慢起来,当达到数万的时候,这个时间已经有点不可接受了。这就是使用limit的一个常见问题,即你要的可能只是n条后的PAGESIZE条,但是从数据库的角度来说,它还是要返回n条,然后从n条里做一个排序返回的,这样数据量的上涨就会给这样的实现带来一定困惑。
后来的解决方案是按照某个可以按照大小排序的字段a来得到PAGESIZE条数据,然后取得这批数据中a最大的值,作为下一次取值的最小值,再取PAGESIZE条数据,以此类推。这样在比较a值大小的时候就避开了大量的数据,limit的offset这个参数就不需要了,每次取到的结果集都较小,从而提高了效率。