用rownum分页应该不算慢吧,我曾对一张990万的大表用三种方法进行测试过,效率如下:
写法一、
select .. from (select rownum id,... from tabname where id<=...) where id>=...;
写法二、
select .. from (select rownum id,... from tabname) where id between .. and ..;
写法三、
select .. from tabname where dbms_rowid.rowid_row_number(rowid) between .. and ..;经测试:
在p4 2.8双cpu,2G内存的机器上,返回记录在10000以下一般都能在不超过20秒的得到响应。
写法一的效率总体上要比写法二要高,写法三的效率最低,而且写法三在表中数据删除后得出的结果可能是不复合要求的听人说有更高效的写法,知道的聊聊
写法一、
select .. from (select rownum id,... from tabname where id<=...) where id>=...;
写法二、
select .. from (select rownum id,... from tabname) where id between .. and ..;
写法三、
select .. from tabname where dbms_rowid.rowid_row_number(rowid) between .. and ..;经测试:
在p4 2.8双cpu,2G内存的机器上,返回记录在10000以下一般都能在不超过20秒的得到响应。
写法一的效率总体上要比写法二要高,写法三的效率最低,而且写法三在表中数据删除后得出的结果可能是不复合要求的听人说有更高效的写法,知道的聊聊
速度慢,主要体现在越靠后的纪录速度越慢,难道你们没有体会吗?
我使用的SQL语句是
select * from (select RowNum id,t.* from (select A.* from A where Condition order by column) t where rownum<=19000) where id>=18991;
我得目的是只要18991-19000之间的10条纪录。
可是在这时,速度很慢,而且其中orde by 语句出现了问题.