我们可以用''替换现有的空数据。 (空白)在oracle查询中使用索引

时间:2014-11-14 11:58:21

标签: performance oracle11g

我正在进行查询优化,例如,在EMP_NAME,EMPLOYEE表的EMP_CODE列上创建一个索引。

根据以下查询我想要检索EMPLOYEE姓名是' SANDIP' (来自前端参数的此传递)和EMP_NAME IS NULL。

SELECT EMP_NAME, EMP_CODE 
FROM EMPLOYEE 
WHERE NVL (EMP_NAME,'A') = NVL ('SANDIP','A');   

以上查询未使用索引,因为EMP_NAME列包含null。 以下查询使用索引。

SELECT EMP_NAME, EMP_CODE 
FROM EMPLOYEE 
WHERE (EMP_NAME = 'SANDIP' or EMP_CODE = '');

因此,将EMP_NAME定义为NOT NULL约束并将EMPLOYEE表标记为包含''的所有现有NULL值是个好主意。

&#39>'''和NULL?

1 个答案:

答案 0 :(得分:0)

感谢a_horse_with_no_name发表评论。 你是正确的Null和''都被认为是空的。所以我的第二个查询使用索引,但不考虑空值。

我已通过以下代码验证过。

- 两者都被视为空

Select * from  
(SELECT '' as a,'b' as b FROM DUAL union
 select null , 'b1' from dual )
where a is null   

- 无行返回

select * from  
(SELECT '' as a,'b' as b FROM DUAL union
 select null , 'b1' from dual )
where a = ''