Oracle的分页查询实现,采用ROWNUM。
格式1(推荐)
SELECT * FROM
(
SELECT temp.*, ROWNUM RN
FROM (SELECT * FROM 表名) temp
WHERE ROWNUM <=end (page*pagesize)
)
WHERE RN >=start (page-1*pagesize+1)
格式2
SELECT * FROM
(
SELECT temp.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) temp
)
WHERE RN BETWEEN start (page-1*pagesize+1) AND end (page*pagesize) 
方法一比方法二效率要高很多,查询效率提高主要体现在 WHERE ROWNUM <= 40 这个语句上。
这是由于CBO 优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。方法一中,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。
ROWNUM原理
执行查询操作
将第一行的row num置为1
将得到的行的rownum与条件相比较,如果不匹配,则抛弃行,如果匹配,则返回行
oracle获取下一行,然后将rownum增1
返回第3步
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号