当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle分页查询语句(三)
发布时间:2010/11/8 10:14:29 来源:www.xue.net 编辑:城市总裁吧
    观察两种不同写法的ORDER BY步骤,一个是带STOPKEY的ORDER BY,另一个不带。在大数据量需要排序的情况下,带STOPKEY的效率要比不带STOPKEY排序的效率高得多。

  SQL> INSERT INTO T SELECT T.* FROM T, USER_OBJECTS;

  已创建407104行。

  SQL> COMMIT;

  提交完成。

  SQL> SELECT OBJECT_ID, OBJECT_NAME

  2 FROM

  3 (

  4 SELECT ROWNUM RN, OBJECT_ID, OBJECT_NAME FROM

  5 (

  6 SELECT OBJECT_ID, OBJECT_NAME FROM T ORDER BY TIMESTAMP

  7 )

  8 WHERE ROWNUM <= 20

  9 )

  10 WHERE RN >= 11;

  已选择10行。

  已用时间: 00: 00: 03.78

  Execution Plan

  ----------------------------------------------------------

  0 SELECT STATEMENT Optimizer=CHOOSE (Cost=64 Card=20 Bytes=1840)

  1 0 VIEW (Cost=64 Card=20 Bytes=1840)

  2 1 COUNT (STOPKEY)

  3 2 VIEW (Cost=64 Card=6361 Bytes=502519)

  4 3 SORT (ORDER BY STOPKEY) (Cost=64 Card=6361 Bytes=260801)

  5 4 TABLE ACCESS (FULL) OF 'T' (Cost=9 Card=6361 Bytes=260801)

  Statistics

  ----------------------------------------------------------

  268 recursive calls

  0 db block gets

  6215 consistent gets

  6013 physical reads

  0 redo size

  740 bytes sent via SQL*Net to client

  385 bytes received via SQL*Net from client

  2 SQL*Net roundtrips to/from client

  6 sorts (memory)

  0 sorts (disk)

  10 rows processed

  SQL> SELECT OBJECT_ID, OBJECT_NAME

  2 FROM

  3 (

  4 SELECT ROWNUM RN, OBJECT_ID, OBJECT_NAME FROM

  5 (

  6 SELECT OBJECT_ID, OBJECT_NAME FROM T ORDER BY TIMESTAMP

  7 )

  8 )

  9 WHERE RN BETWEEN 11 AND 20;

  已选择10行。

  已用时间: 00: 00: 11.86

  Execution Plan

  ----------------------------------------------------------

  0 SELECT STATEMENT Optimizer=CHOOSE (Cost=64 Card=6361 Bytes=585212)

  1 0 VIEW (Cost=64 Card=6361 Bytes=585212)

  2 1 COUNT

  3 2 VIEW (Cost=64 Card=6361 Bytes=502519)

  4 3 SORT (ORDER BY) (Cost=64 Card=6361 Bytes=260801)

  5 4 TABLE ACCESS (FULL) OF 'T' (Cost=9 Card=6361 Bytes=260801)

  Statistics

  ----------------------------------------------------------

  26 recursive calls

  12 db block gets

  6175 consistent gets

  9219 physical reads

  0 redo size

  737 bytes sent via SQL*Net to client

  385 bytes received via SQL*Net from client

  2 SQL*Net roundtrips to/from client

  0 sorts (memory)

  1 sorts (disk)

  10 rows processed

  观察两个查询语句的执行时间,以及统计信息中的排序信息。对于第一个查询语句,Oracle利用了ORDER BY STOPKEY方式进行排序,排序操作只排序需要的TOP N的数据,因此排序操作放到了内存中,而对于第二个查询语句来说,进行的数据的全排序,排序数据量大,排序操作不得不在磁盘上完成,因此耗时比较多。

  通过上面的例子可以看出给出的标准分页查询格式,对于包含排序的操作仍然可以在很大程度上提高分页查询性能。

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved