Oracle
執行計劃的“A_ROWS”列中的數字對於“索引掃描”操作顯示什麼?
我有一個查詢,如下所示:
select /*+gather_plan_statistics*/ * from mi_dimcustomer t where t.CUSTOMER_NUM = 321937
表中有一個
Unique Index
(IDX1_DIMCUSTOMER)
onCustomer_Num
列。我使用了/*+gather_plan_statistics*/
提示並Dbms_xplan.display_cursor
獲得了真正的執行計劃,這就是我所擁有的:SQL_ID adj0b6drg6bjd, child number 0 ------------------------------------- select /*+gather_plan_statistics*/* from vmi_dimcustomer t where t.CUSTOMER_NUM = 321937 Plan hash value: 3784660444 ----------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | Cost (%CPU)| A-Rows | A-Time | Buffers | ----------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 2 (100)| 1 |00:00:00.01 | 3 | | 1 | TABLE ACCESS BY INDEX ROWID| MI_DIMCUSTOMER | 1 | 1 | 2 (0)| 1 |00:00:00.01 | 3 | |* 2 | INDEX UNIQUE SCAN | IDX1_DIMCUSTOMER | 1 | 1 | 1 (0)| 1 |00:00:00.01 | 2 | ----------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("CUSTOMER_NUM"=321937)
我的問題是,
Operation-2 , Index unique scan.
據我所知,發生的Index scan
只是掃描/搜尋Index Page
,檢索所需的 Rowid,然後使用這些 Rowid 訪問表中的正確位置(這是 op-1)。我不期望操作-2(只是掃描索引頁)生成任何行!那麼為什麼我們會看到$$ A-rows $$=1 在 op-2 的執行計劃中?這個數字代表什麼? 我的猜測是它將等於從 index page 返回的 ROWID 的數量。
提前致謝
您的猜測是正確的,它是從索引返回的 rowid 的數量。這是表訪問檢查的行數,但不一定是它返回的行數(例如,您有另一個過濾器,只能在讀取行的其餘部分後應用)。