2009-09-09 71 views
1

作爲對這兩個問題的跟進和其答案Question 1Question 2Oracle查詢性能

使用運算符in,orunion的Oracle在Oracle上的性能如何?我認爲在一張桌子上,行數> 1 mio,每行10-500行,每行的y值不同。

select * from table where y in (1,2,3) 

select * from table where (y = 1 or y = 2 or y = 3) 

select * from table where y = 1 
union 
select * from table where y = 2 
union 
select * from table where y = 3 

如何,如果我添加一個and x = 1的性能影響?列x也被索引並具有相同的選擇性。

摘要: 沒有最佳實踐或建議使用一個操作員比其他更好。在最好的情況下,所有3個語句的性能指標都相同但可以這樣說,一個聲明比其他聲明更好。

有一些線程在那裏,討論的Oracle SQL語句的性能指標:

的工具,你必須處理的execution plans and tracing tools以獲得最佳性能。

回答

4

UNION ALL通常會比UNION執行效果更好,因爲UNION是一個集合操作,默認情況下會刪除重複項(與MINUS和INTERSECT一樣)。 UNION ALL意味着它不會執行重複刪除步驟。在您的具體示例中,由於選擇了所有列(包括Y),並且根據定義,Y值對於三個SELECT中的每一個的結果集都不相同,因此不必執行重複數據刪除。

一般規則是,編寫回答您所問問題的查詢。 然後檢查解釋計劃,看看它是否合適。 只有當計劃是次優時,您纔會開始擔心如何重新編寫查詢以改進計劃。

+0

+1對於UNION ALL提示! – Christian13467 2009-09-09 09:25:14

1

我全心全意地認同Theo,你應該學會回答這樣的問題。

有一個易於使用的utility on the AskTom site,它會告訴你哪個查詢/過程中哪個更快,哪個使用更多的資源。

1

檢查此out。這也可能有幫助。如果可能,請將結果顯示爲答案。可能爲我們所有人獲得寶貴的知識