Oracle分页查询优化方法与实例分析.pdfVIP

  • 0
  • 0
  • 约2.87千字
  • 约 4页
  • 2026-02-13 发布于北京
  • 举报

oracle分页查询

还是利用分析函数

_

rownumber()over(partitionbycol1orderbycol2)

比如想取出100‑150条记录,按照tname排序

_

selecttname,tabtypefrom(selecttname,tabtype,rownumber()over

(orderbytname)rnfromtab)wherernween100and150;

2.直接使用rownum虚列

selecttname,tabtypefrom(

selecttname,tabtype,rownumrnfromtabwhererownum=150

)

wherern=100;

使用序列不能基于整个记录集合进行排序,如果指定了orderby子句,排序的是

选出来的记录集的排序。

‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑

经过我的测试,在100万条数据的表中,检索数据的时候,方法2的速度要比方法

1要快。

伪列(pseudocolumn)ROWNUM中包含有当前的行号。很多人在第一次试图返回表

间某段记录子集时,都会发现下面这种方法行不通:

select*fromall_objectswhererownumween30and49;

这种写法之所以行不通,是因为ROWNUM列只有在记录被取出或过滤时才会应用到

记录上。第一行在被取出时会被抛出,因为它的ROWNUM是1。然后,下一行被取出;

它也会被抛出,因为它是新的“1”,以此类推,直到所有的行都被使用。这个查询不会返回

任何记录。解决方法是在看到30到50之间的记录时必须先取出1到30行的记录:

select*fromall_objectswhererownum=49;

然后,你可以将其子查询,并过滤掉起始点之前的所有记录(注意我必须为

“rownum”一个别名才能编译):

select*from(selectrownumr,all_objects.*fromall_objectswhererownum

49)t

oracle分页查询

.还是利用分析函数

row_number()over(partitionbycol1orderbycol2)

比如想取出100-150条记录,按照tname排序

selecttname,tabtypefrom(

selecttname,tabtype,row_number()over(orderbytname)rnfrom

tab

)

wherernween100and150;

2.直接使用rownum虚列

selecttname,tabtypefrom(

selecttname,tabtype,rownumrnfromtabwhererownum=150

)

wherern=100;

使用序列不能基于整个记录集合进行排序,如果指定了orderby子句,排序的的

是选出来的记录集的排序.

经过我的测试,在100万条数据的表中,检索数据的时候,方法2的速度要比方法

1要快的.

伪列(pseudocolumn)ROWNUM中包含有当前的行号。很多人在第一次试图返回表间某

段记录子集时,都会发现下面这种方法行不通:

select*fromall_objectswhererownumween30and49;

这种写法之所以行不通,是因为ROWNUM列只有在记录被取出或过滤时才会应用到

记录上。第一行在被取出时会被抛出,因为它的ROWNUM是1。然后,下一行被取出;

它也会被抛出,因为它是新的“1”,以此类推,直到所有的行都被使用。这个查询不会返回

任何记录。解决方法是在看到30到50之间的记录时必须先取出1到30行的记录:

select*fromall_objectswhererownum=49;

然后,你可以将它

文档评论(0)

1亿VIP精品文档

相关文档