这两天有点空了,开始反思一下自己的收获,后面会陆续把一些值得记忆的问题记录下来。 刚开始搞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条里做一个排序返回的,这样数据量的上涨就会给这样的实现带来一定困惑。 |