IS NOT NULL vs =效率?

时间:2014-05-08 13:22:09

标签: sql performance oracle11g

我的Oracle数据库CLOSED_STATUS中的

是一个Varchar2列,它是NULL或' +',除了这两个之外没有其他可能的值。

我想检索CLOSED_STATUS =' +'。

的所有行

以下哪种SQL查询更有效和/或更快?

SELECT ID FROM DB_ADM.ISSUE WHERE (CLOSED_STATUS = '+')
SELECT ID FROM DB_ADM.ISSUE WHERE (CLOSED_STATUS IS NOT NULL)

2 个答案:

答案 0 :(得分:0)

取决于。

我的猜测是计划之间没有区别。您需要为两个语句生成查询计划,以查看它们是否实际上不同。如果它们不同,那么我们可以看看为什么它们不同,哪个计划更有效。

答案 1 :(得分:0)

这取决于CLOSE_STATUS是否被索引(以及该表包含的数据)。

如果没有编入索引,普通测试表上的执行计划表明成本是相同的。

但如果列已编入索引,则使用CLOSED_STATUS = '+',如果效率高于CLOSED_STATUS IS NOT NULL