我正在进行查询优化,例如,在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?
答案 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 = ''