2014-10-30 56 views
1

我有一個對大量數據運行相當複雜的查詢的視圖。當我運行所有數據的視圖時,需要幾分鐘時間,這很好。我的問題是,當我通過連接到另一個較少行的表來減少結果集或使用子查詢中的where子句時,它仍然需要整整兩分鐘才能運行。我發現如果我在where子句中指定id作爲文本,查詢將返回非常快。爲了說明我的意思:Oracle查看性能

考慮下面的查詢返回單行,結果1234:

select id from mytable where external_id = 1; 

如果我查詢我認爲它大約需要2分鐘來執行所有的行,預計

Select * from my_view ; 

如果我使用下面的查詢查詢我看來,它仍然會採取整整2分鐘來執行:

Select * from my_view v where v.id = (select id from mytable where external_id = 1); 

但是,如果我在查詢中指定的ID權,將在更短的返回再進行第二次

Select * from my_view v where v.id =1234; 

由於這兩個查詢將始終返回相同的結果是他們反正我可以指示Oracle首先運行子查詢,以便它可以以與第二個查詢相同的方式過濾視圖? (注意:加入mytable會得到相同的結果,我選擇在示例中使用子查詢,因爲我認爲它更清晰)。

回答

0

我沒有完全問你的問題,但MO_MERGE可能會幫助你。