大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/179178.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...