Oracle 執行計劃中access 和 filter的區別
一、簡要說明:
Prediceate(謂詞):一個查詢中的WHERE限制條件。
在檢視執行計劃的資訊中,經常會看到兩個謂詞filter和access,它們的區別是什麼,理解了這個兩個詞對我們解讀Oracle的執行計劃資訊會有所幫助。
簡單地說,執行計劃如果顯示是access,就表示這個謂詞條件的值將會影響資料的訪問路徑(表還是索引),而filter表示謂詞條件的值並不會影響資料訪問路徑,只起到過濾的作用。
二、舉例說明:
----建立一張表echo----
SQL> create table echo as select * from dba_objects;
Table created.
SQL> set autotrace trace exp;
SQL> set linesize 150;
SQL> select * from echo where object_id=1000;
Execution Plan
----------------------------------------------------------
Plan hash value: 642657756
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 12 | 2484 | 289 (1)| 00:00:04 |
|* 1 | TABLE ACCESS FULL| ECHO | 12 | 2484 | 289 (1)| 00:00:04 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("OBJECT_ID"=1000) ----因為表echo沒有建立索引,執行計劃沒有選擇資料訪問路徑的餘地,謂詞條件在這裡只是起到資料過濾的作用,所以使用了filter。
Note
-----
- dynamic sampling used for this statement (level=2)
----建立索引的情況----
SQL> create index echo_ind on echo(object_id);
Index created.
SQL> select * from echo where object_id=1000;
Execution Plan
----------------------------------------------------------
Plan hash value: 1345159126
----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 207 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| ECHO | 1 | 207 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | ECHO_IND | 1 | | 1 (0)| 00:00:01 |
----------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("OBJECT_ID"=1000) ----謂詞條件影響到資料訪問的路徑,選擇了索引,所以用access。
Note
-----
- dynamic sampling used for this statement (level=2)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29196873/viewspace-1136977/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【提示】filter 與access 的區別Filter
- Oracle Exadata的TABLE ACCESS STORAGE FULL執行計劃Oracle
- 看懂Oracle中的執行計劃Oracle
- Oracle 索引和執行計劃Oracle索引
- oracle中執行計劃中的cardinalityOracle
- Oracle 'or exists/in'結合使用引起的filter執行計劃 的優化OracleFilter優化
- oracle中開啟執行計劃Oracle
- Spring中Filter和Interceptor的區別SpringFilter
- SQLAlchemy中filter()和filter_by()有什麼區別SQLFilter
- ORACLE執行計劃Oracle
- filter和interceptor的區別Filter
- 建了索引執行計劃會有區別了索引
- sql執行計劃變更和刪除快取中執行計劃的方法SQL快取
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- 四種dbms包檢視執行計劃的區別
- Oracle中執行儲存過程call和exec區別Oracle儲存過程
- jQuery not()和filter()區別jQueryFilter
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- oracle sqlprofile 固定執行計劃,並遷移執行計劃OracleSQL
- 在Oracle中,如何得到真實的執行計劃?Oracle
- ORACLE執行計劃的介紹Oracle
- ORACLE執行計劃的檢視Oracle
- oracle執行計劃的使用(EXPLAIN)OracleAI
- Linux中執行緒和程式的區別Linux執行緒
- 關於檢視Oracle資料庫執行計劃的命令(set autotrace的用法和含意及區別[轉])Oracle資料庫
- Oracle中檢視已執行sql的執行計劃OracleSQL
- shell中的source和直接執行sh的區別
- jQuery filter()和find()區別jQueryFilter
- Oracle執行計劃詳解Oracle
- oracle固定執行計劃--sqlprofileOracleSQL
- Oracle閱讀執行計劃Oracle
- oracle執行計劃相關Oracle
- oracle 執行計劃變更Oracle
- 【優化】Oracle 執行計劃優化Oracle
- oracle 執行計劃設定Oracle
- Oracle 執行計劃 分析和動態取樣Oracle