0

我有如下的查詢:在子句與OR子句性能明智

select * 
from table_1 
where column_name in ('value1','value2','value3'); 

考慮到在這樣一個表中的數據可能在數以百萬計,將下面的重組幫助更好?

select * 
from table_1 where 
column_name = 'value1' 
or column_name = 'value2' 
or column_name ='value3'; 

select * 
from table_1 
where column_name = any ('value1','value2','value3'); 

我需要知道的性能優勢也可能的話。

在此先感謝

+0

IN和OR理論上是相同的......如果你認爲他們不是沒有你的測試顯示?你測試過它們嗎? – Ben 2013-03-11 09:09:53

+0

可能重複[IN或OR的ORACLE,哪個更快?](http://stackoverflow.com/questions/6514906/in-vs-or-of-oracle-which-faster) – Ben 2013-03-11 09:10:45

+0

嚴重.. 我聽說有性能差異,但我無法得到確切的更好的。 – 2013-03-11 09:11:04

回答

2

只有在3值檢查的情況下查詢並不重要。

Oracle會重新編寫查詢以匹配可用的最佳選項。

萬一有更多的值,並且太動態,那麼在子句或內部聯接可能會更好。

最好離開查詢,因爲它是目前

1

有比「IN」或多個「WHERE」條件快3路:

select * 
from table_1 as tb1 
inner join table_2 as tb2 
where tb1.column_name = tb2.column_name 

這裏TABLE_2(或查詢),將有被列出的所需值在你的例子中'IN'和'WHERE'條件。

+0

正如我所說的where子句中只有3個值value1,value2,value3。這些都是最終的,爲什麼我會去創建另一個表並進行連接,wouldnt它會更慢.. ?? – 2013-03-11 09:30:03

+0

如果這是相關的,那麼請將它添加到問題中,而不僅僅是評論。 – 2013-03-11 10:04:33