oracle简单的分页查询语句

方式1:

SELECT * 
FROM ( SELECT A.*, ROWNUM RN 
            FROM (SELECT * FROM TABLE_NAME) A 
            WHERE ROWNUM <= 40 ) 
WHERE RN >= 21

方式2:

SELECT * 
FROM ( SELECT A.*, ROWNUM RN 
            FROM (SELECT * FROM TABLE_NAME) A ) 
WHERE RN BETWEEN 21 AND 40

绝大多数的情况下,第一个查询的效率比第二个高得多。 

这是由于Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。

对于第一个查询语句,第二层的查询条件就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了限制条件,就终止查询将结果返回了。

而第二个查询语句,由于查询条件是存在于查询的最外层,而Oracle无法将最外层的查询条件推到最内层

因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。

数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。

原文地址:https://www.cnblogs.com/yangsoon/p/7698274.html