我遇到了一些我不能解釋的奇怪現象。執行計劃與預期不符
我使用下面的查詢:
MERGE INTO Main_Table t
USING Stg_Table s
ON(s.site_id = t.site_id)
WHEN MATCHED THEN
UPDATE SET t.arpu_prev_period = s.arpu_prev_period
.... --50 more columns
where t.period_code = 201612
Stg_Table:索引(SITE_ID)
MAIN_TABLE:
- 索引(Period_code,SITE_ID)
- 注 - 通過period_code
分區 - 我嘗試在Site_Id
上單獨添加索引,執行計劃相同。
我期待一個使用單分區掃描的執行計劃,但我得到Partition list all
。
這是執行計劃:
6 | 0 | MERGE STATEMENT | |
7 | 1 | MERGE | Main_Table |
8 | 2 | VIEW | |
9 | 3 | HASH JOIN | |
10 | 4 | TABLE ACCESS FULL | Stg_Table |
11 | 5 | PARTITION LIST ALL| |
12 | 6 | TABLE ACCESS FULL| Main_Table |
編輯:對於澄清,如果它是不明確的,我不是在尋找如何使甲骨文的答案,只掃描單個分區,我已經知道把t.period_code = 201612
放在ON
條款中會沒問題。我的問題是 - 爲什麼oracle不會評估應該只過濾特定分區的WHERE
子句?
如果您將't.period_code = 201612'移動到'ON'狀態而不是'WHERE',您是否得到相同的計劃? – Kacper
Oracle版本? –
11g @DuduMarkovitz – sagi