关于COUNT STOPKEY的工作机制
生活随笔
收集整理的這篇文章主要介紹了
关于COUNT STOPKEY的工作机制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ?在查詢中有時使用到偽列rownum對使用偽列rownum的查詢,優化器要么使用count操作,要么使用count stopkey操作來對rownum計數器進行增量(注意:這里的count操作和count stopkey操作與count函數沒有任何關系),如果對rownum偽列應用一個限定條件,如:where rownum<10;則使用 count stopkey操作,如果不為Rownum偽列指定限定條件,則是使用count操作。
?select id,rownum from employee;(在id列上有一個主鍵索引)為了完成這個查詢,優化器執行一個全索引掃描(主鍵索引),后跟一個count操作生成每個行的rownum值,
count操作不需要等待得到整個記錄集,隨著從employee表中返回記錄,rownum計數器進行增量,從而確定每個記錄的rownum.
例2:在rownum偽列上使用一個限定
?select id,rownum from employee where rownum<10;
? ? ?為了實施限定條件,優化器用count stopkey操作代替count操作,它將rownum偽列的增量值與限定條件中指定的值進行比較,如果rownum偽列的值大于限定條件中指定的值,則查詢不再返回更多的行!
?
?注意:在where 子句中不能使用 rownum>10這樣的操作,只能使用rownum<10這樣的操作!
?
?
?
?SQL> select rownum rn ,a.* from cnmir.ew_auctions a where rownum<50000;
Execution Plan
----------------------------------------------------------
Plan hash value: 721966694
----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 49999 | 4833K| 163 (2)| 00:00:02 |
|* 1 | COUNT STOPKEY | | | | | |
| 2 | TABLE ACCESS FULL| EW_AUCTIONS | 49999 | 4833K| 163 (2)| 00:00:02 |
----------------------------------------------------------------------------------
SQL> select * from cnmir.ew_auctions where issue_id<80;
Execution Plan
----------------------------------------------------------
Plan hash value: 518049957
---------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 99 | 1379 (2)| 00:00:17 |
|* 1 | TABLE ACCESS FULL| EW_AUCTIONS | 1 | 99 | 1379 (2)| 00:00:17 |
---------------------------------------------------------------------------------
可見COUNT STOPKEY 機制是只針對rownum而設定的!
?
總結
以上是生活随笔為你收集整理的关于COUNT STOPKEY的工作机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle goldengate 11
- 下一篇: sys.dbms_transaction