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

oracle中is not null,oracle之is null和is not null的优化oracle之优化isnull语句一:isnull的优化方法:通过nvl(字段,j)=j的方式,将字段中为空的数据转化为j,从而正常使用索引。具体实现条件则是:iisnull<===>j=nvl(i,j);注意:使用时必须要确保字段的数据不包含j,例如:(age,15)=15,此时有可能age内容是15,此时不可以,j的值要变换,保证不再age的范围之内。函数介绍:nv…

大家好,欢迎来到IT知识分享网。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 student t where not exists

(select 1 form student s where 1=nvl(s.age,1));

–11g版本后not in和not exists趋于相似,也可以用not in

–当t.col_x不存在等于1的数据时等价于

–select * from student t where t.age is not null;

2:比较大小

–当t.age为总是大于1的数值时

select * from student t where 1

–当t.age为总是小于1的数值时

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

–直接比较大小,暗含了 IS NOT NULL

select * from student t where t.age>1;

3:比较长度

–当t.age的长度总是大于1时

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

–因为length函数的参数为空时,其结果为空,因而不能直接使用length函数

参考链接:

https://blog.csdn.net/qq_38880340/article/details/84290900

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15255.html

(0)
上一篇 2024-02-19 13:15
下一篇 2024-02-22 17:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信