Oracle 執行計划中access 和 filter的區別


一、簡要說明:

    Prediceate(謂詞):一個查詢中的WHERE限制條件。

    在查看執行計划的信息中,經常會看到兩個謂詞filter和access,它們的區別是什么,理解了這個兩個詞對我們解讀Oracle的執行計划信息會有所幫助。

    簡單地說,執行計划如果顯示是access,就表示這個謂詞條件的值將會影響數據的訪問路徑(表還是索引),filter表示謂詞條件的值並不會影響數據訪問路徑,只起到過濾的作用

二、舉例說明:

 ----創建一張表echo----
1
SQL> create table echo as select * from dba_objects; 2 3 Table created. 4 5 SQL> set autotrace trace exp; 6 SQL> set linesize 150; 7 SQL> select * from echo where object_id=1000; 8 9 Execution Plan 10 ---------------------------------------------------------- 11 Plan hash value: 642657756 12 13 -------------------------------------------------------------------------- 14 | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 15 -------------------------------------------------------------------------- 16 | 0 | SELECT STATEMENT | | 12 | 2484 | 289 (1)| 00:00:04 | 17 |* 1 | TABLE ACCESS FULL| ECHO | 12 | 2484 | 289 (1)| 00:00:04 | 18 -------------------------------------------------------------------------- 19 20 Predicate Information (identified by operation id): 21 --------------------------------------------------- 22 23 1 - filter("OBJECT_ID"=1000) ----因為表echo沒有創建索引,執行計划沒有選擇數據訪問路徑的余地,謂詞條件在這里只是起到數據過濾的作用,所以使用了filter。 24 25 Note 26 ----- 27 - dynamic sampling used for this statement (level=2) 28 ----創建索引的情況----
29
SQL> create index echo_ind on echo(object_id); 30 31 Index created. 32 33 SQL> select * from echo where object_id=1000; 34 35 Execution Plan 36 ---------------------------------------------------------- 37 Plan hash value: 1345159126 38 39 ---------------------------------------------------------------------------------------- 40 | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 41 ---------------------------------------------------------------------------------------- 42 | 0 | SELECT STATEMENT | | 1 | 207 | 2 (0)| 00:00:01 | 43 | 1 | TABLE ACCESS BY INDEX ROWID| ECHO | 1 | 207 | 2 (0)| 00:00:01 | 44 |* 2 | INDEX RANGE SCAN | ECHO_IND | 1 | | 1 (0)| 00:00:01 | 45 ---------------------------------------------------------------------------------------- 46 47 Predicate Information (identified by operation id): 48 --------------------------------------------------- 49 50 2 - access("OBJECT_ID"=1000) ----謂詞條件影響到數據訪問的路徑,選擇了索引,所以用access。 51 52 Note 53 ----- 54 - dynamic sampling used for this statement (level=2)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM