mysql数据库:支持分页查询,但对于大数量表进行查询时,效率很低,分页原理如:
limit 10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行,问题就在这里,如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。limit n性能是没问题的,因为只扫描n行,所以在mysql中采用分页查询时,我们还得好好想想,留给大家思考,好的想法可以留言交流?
高效分页查询:提示:利用索引,排序进行查询
mysql一次查询page,rows,size,maxpage基本方式:
select *,(select page) as page,(select rows) as rows ,(select COUNT(1) from tablename) as size,
(select COUNT(1)/2 from tablename) as maxpage from userinfo LIMIT page,rows;
SQLserver本身其实并不支持分页查询,也没有limit,但是有top m,取表中前m条数据。比如:表A有id,a,b,c,d几个字段,
数据库中排序方式可以是:
select top rows * from A where id >(page-1)*rows order by id asc;
sqlserver一次查询page,rows,size,maxpage基本方式:可以仿照mysql查询方式,这里我就不在重复写了。
oracle支持分页查询,方式:skip page limit rows;
高效分页查询:与MySQL有点差异,但是原理是大体相同,模型如下:(rownum是oracle行号)
select t2.*
from (select rownum r,t1.* from youtable t1 where rownum<?) t2
where t2.r>?,
如需更高效率:请使用order by