Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1393263
  • 博文数量: 173
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3841
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-30 13:00
个人简介

About me:Oracle ACE pro,optimistic,passionate and harmonious. Focus on ORACLE,MySQL and other database programming,peformance tuning,db design, j2ee,Linux/AIX,Architecture tech,etc

文章分类

全部博文(173)

文章存档

2025年(1)

2024年(27)

2023年(28)

2022年(43)

2020年(62)

2014年(3)

2013年(9)

分类: Oracle

2023-05-08 15:49:55

接: 使用索引进行高效分页pagination_PART1



上面是典型的错误分页写法和正确写法,错误的写法会导致结果有问题。再看下面的例子:

1)原写法{BANNED}最佳内层根据use_date等条件查询,然后排序,获取rownum并取别名,{BANNED}最佳外层使用rn规律。问题在哪?
2)分页写法如果直接<,<=可在排序后直接rownum获取(两层嵌套),如果需要获取区间值,在{BANNED}最佳外层获取>,>=(三层嵌套),分页的正常写法是需要先排序。
3)此语句获取<=,而使用三层嵌套,导致无法使用分页查询STOPKEY算法,因为rownum会阻止谓词推入。

4)<=分页只需要2层嵌套,done_date列有索引,根据条件done_date>to_date(‘20150916’,‘YYYYMMDD’)和只获取前20行,可高效利用索引和STOPKEY算法,改写完成后使用索引降序扫描,执行时间从1.72s到0.01s,逻辑IO 从42648到59,具体如下:

高效分页查询要点:能够走STOPKEY、能通过索引消除排序。



 
阅读(727) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~