数据库SQL分页

    技术2025-04-04  32

    采用数据库SQL分页需要两次SQL完成一个SQL计算总数量一个SQL返回分页后的数据优点:性能好缺点:编码复杂,各种数据库语法不同,需要两次SQL交互。 oracle数据库一般采用rownum来进行分页,常用分页语法有如下两种: 直接通过rownum分页:select * from (         select a.*,rownum rn from                   (select * from product a where company_id=? order by status) a         where rownum<=20)where rn>10;数据访问开销=索引IO+索引全部记录结果对应的表数据IO 采用rowid分页语法优化原理是通过纯索引找出分页记录的ROWID,再通过ROWID回表返回数据,要求内层查询和排序字段全在索引里。create index myindex on product(company_id,status); select b.* from (         select * from (                   select a.*,rownum rn from                            (select rowid rid,status from product a where company_id=? order by status) a                   where rownum<=20)         where rn>10) a, product bwhere a.rid=b.rowid;数据访问开销=索引IO+索引分页结果对应的表数据IO 实例:一个公司产品有1000条记录,要分页取其中20个产品,假设访问公司索引需要50个IO,2条记录需要1个表数据IO。那么按第一种ROWNUM分页写法,需要550(50+1000/2)个IO,按第二种ROWID分页写法,只需要60个IO(50+20/2); 

    最新回复(0)