接:
使用索引进行高效分页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、能通过索引消除排序。
l<=分页只需要2层嵌套,done_date列有索引,根据条件done_date>to_date(‘20150916’,‘YYYYMMDD’)和只获取前20行,可高效利用索引和STOPKEY算法,改写完成后使用索引降序扫描,执行时间从1.72s到0.01s,逻辑IO 从42648到59,具体如下:
l<=分页只需要2层嵌套,done_date列有索引,根据条件done_date>to_date(‘20150916’,‘YYYYMMDD’)和只获取前20行,可高效利用索引和STOPKEY算法,改写完成后使用索引降序扫描,执行时间从1.72s到0.01s,逻辑IO 从42648到59,具体如下:
阅读(727) | 评论(0) | 转发(0) |