Oracle

執行計劃的“A_ROWS”列中的數字對於“索引掃描”操作顯示什麼?

  • January 23, 2022

我有一個查詢,如下所示:

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 的數量。這是表訪問檢查的行數,但不一定是它返回的行數(例如,您有另一個過濾器,只能在讀取行的其餘部分後應用)。

引用自:https://dba.stackexchange.com/questions/306459