zoukankan      html  css  js  c++  java
  • 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<nvl(t.age,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
    
  • 相关阅读:
    linux服务器安装nginx及使用
    服务器搭建
    Linux安装mysql5.7
    个人服务器的选择
    DECODE函数简介
    ORACLE数据库优化
    Mac下JD-GUI无法使用
    Qt 中QString 字符串操作:连接、组合、替换、去掉空白字符
    [Qt初级] 解决 中QMainWindow和QDockWidget添加布局失败问题
    我的JS 中级学习篇
  • 原文地址:https://www.cnblogs.com/clover-forever/p/13825174.html
Copyright © 2011-2022 走看看