2010-11-24 57 views
2

VIEW1 IS:如何在我的視圖包含UNION ALL時使Oracle使用索引?

SELECT A, B, C FROM view2 
UNION ALL 
SELECT A, B, C FROM view3 
    INNER JOIN TBL5 ON view3.CODE = TBL5.CODE 

C列在源表索引,並且當我執行選擇語句的單獨它使用的索引和回來在閃蒸。當我使用視圖超時。我的印象是,Oracle重寫了對查看的查詢,並在有用的地方使用了索引,而不是做一個SELECT * FROM VIEW1,然後在事實之後應用謂詞。

我在做什麼錯?上面的示例視圖說明了這個問題,但是我的真實視圖每個都加入了幾十個表格,因此視圖是非常必要的。

+0

索引列是「CODE」列嗎?你說「C列」。附: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:625452100346586215 – Tim 2010-11-24 13:10:40

回答

2

當構建執行計劃時,優化器不會知道代碼的價值是多少,因爲您違背了視圖。如果您使用11g,則可以使用PUSH_PRED優化程序提示使其按預期工作。

0

你可以嘗試一個提示。 或確保分析表格。

另一個想法 - 也許做一個物質化視圖?