oracle中is not null,oracle之is null和is not null的优化

oracle之优化is null语句

一:is null的优化

方法:通过nvl(字段,j)=j的方式,将字段中为空的数据转化为j,从而正常使用索引。

具体实现条件则是:i is null <===> j = nvl(i,j);

注意:使用时必须要确保字段的数据不包含j,例如:(age,15)=15,此时有可能age

内容是15,此时不可以,j的值要变换,保证不再age的范围之内。

函数介绍:

nvl(a,b,c.......):当a为空时取b,当b为空时取c,以此类推。

当然还有另外一种方式解决这个问题:将null包含到索引中

--使用nvl函数的方式(不用添加索引,推荐)

select * from student t where 1=nvl(t.age,1);

--当t.age不存在等于1的数据时等价于

--select * from student t where t.age is null;

--添加索引的方式

create index idx_age_x on tab_i(decode(age,null,1));

select * from student t where decode(t.age,null,1)=1;

二:is not null的优化

方法:结果集不包含j = nvl(i,j)即可

通常情况下使用not exists或者比较大小

示例:

1:not exists

select * from st

你可能感兴趣的:(oracle中is,not,null)