在条款与OR条款表现明智

时间:2013-03-11 09:08:28

标签: sql performance oracle database-performance query-performance

我的查询如下:

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');

如果可能,我还需要了解性能优势。

提前致谢

2 个答案:

答案 0 :(得分:2)

在仅进行3次值检查的情况下,查询无关紧要。

Oracle将重新编写查询以匹配可用的最佳选项。

如果有更多的值且太动态,那么in子句或内部连接可能会更好。

最好保留当前的查询

答案 1 :(得分:1)

第三种方式比“IN”或多种“WHERE”条件更快:

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

这里table_2(或查询)将具有在示例中的“IN”和“WHERE”条件中列出的必需值。