sql is not null 优化(oracle语句索引优化)

oracle优化:ISNULL的优化优化方法:通过nvl(字段i,j),将字段i中为空的数据转化为j,从而将条件iisnull转化为j=nvl(i,j);转化isnull在所用oracle版本提升明显,注意:使用时必须确保字段i的数据不包含j!函数介绍:nvl(a,b,c,…)当a为空时取b,当b为空取c,以此类推.优化示例select*fromtab_i…

大家好,又见面了,我是你们的朋友全栈君。

IS NULL的优化

优化方法:
通过nvl(字段i,j),将字段i中为空的数据转化为j,从而正常使用索引.
具体则是将条件 i is null 转化为 j = nvl(i,j);
数据量较大时转化is null 在所用oracle版本提升明显,
注意:使用时必须确保字段i的数据不包含j!
缺陷:字段i不能有值为j的数据
另外一种方式是将null包含到索引中

函数介绍:
nvl(a,b,c,…)
当a为空时取b,当b为空取c,以此类推.

优化示例

--使用nvl函数的方式(不用添加索引,推荐)
select*from tab_i t where 1=nvl(t.col_x,1);
--当t.col_x不存在等于1的数据时等价于
--select*from tab_i t where t.col_x is null;
--添加索引的方式
create index idx_col_x on tab_i(decode(col_x,null,1));
select*from tab_i t where decode(t.col_x,null,1)=1;

IS NOT NULL的优化

优化方法
结果集不包含 j = nvl(i,j)即可,方式多样.
通常情况下可以使用not exists或者比较大小,
这两种效率一般高于比较长度

优化示例

  1. not exists
select*from tab_i t where not exists 
(select 1 form tab_i i where 1=nvl(i.col_x,1));
--11g版本后not in和not exists趋于相似,也可以用not in
--当t.col_x不存在等于1的数据时等价于
--select*from tab_i t where t.col_x is not null;
  1. 比较大小
--当t.col_x为总是大于1的数值时
select*from tab_i t where 1<nvl(t.col_x,1);
--当t.col_x为总是小于1的数值时
select*from tab_i t where 1>nvl(t.col_x,1);
--直接比较大小,暗含了 IS NOT NULL
select*from tab_i t where t.col_x>1;
  1. 比较长度
--当t.col_x的长度总是大于1时
select*from tab_i t where 2<=length(nvl(t.col_x,1));
--因为length函数的参数为空时,其结果为空,因而不能直接使用length函数
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126517.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c++【键盘读入操作】,两种方法做小游戏的控制摇杆

    c++【键盘读入操作】,两种方法做小游戏的控制摇杆

    2021年3月12日
    186
  • java运行环境安装及配置教程

    java运行环境安装及配置教程用来进行web开发的工具有很多,Tomcat是其中一个开源的且免费的javaWeb服务器,是Apache软件基金会的项目。电脑上安装配置Tomcat的方法和java有些相同,不过首先需要配置好java的环境才行。一.java环境的配置1.下载安装javaJDK,注意安装的路径,我们需要进行环境变量的配置(安装jdk随意选择目录只需把默认安装目录\java之前的目录修改即可)

    2022年7月17日
    23
  • java finalize 作用_java中的finalize方法有什么作用「建议收藏」

    java finalize 作用_java中的finalize方法有什么作用「建议收藏」java中的finalize方法是Object类中提供的一个方法,在GC准备释放对象所占用的内存空间之前,它将首先调用finalize()方法。finalize()方法是Object类中提供的一个方法,在GC准备释放对象所占用的内存空间之前,它将首先调用finalize()方法。其在Object中定义如下:protectedvoidfinalize()throwsThrowable{}…

    2022年9月19日
    2
  • 特殊字符乱码问题

    特殊字符乱码问题1、使用标签建议用(标签可以控制转换特殊字符):<html:textproperty=“instruction”readonly=“true”styleClass=“mylongreadonly”size=“32”/><inputname=“instruction”type=“hidden”value=”<mycim2:writename=“objec…

    2022年6月8日
    58
  • cmpp发送短信[通俗易懂]

    cmpp发送短信[通俗易懂]思路:把各种操作解耦,创建各种线程异步进行1.创建一个阻塞队列用来存储任务2.创建一个任务线程,从待发表里取数据(待发表里有专门标明是否被处理过的字段),注入任务队列3.创建n个接收线程,向接收表中塞入数据4.创建n个发送进程,从任务队列里取数据,发送一共有待发表,接收表,已发表,发送错误表,回执状态表5张基础表具体基础代码参考cmpp2.0文档,或者自己搜索…

    2025年7月5日
    2
  • mac phpstorm激活码2021【在线注册码/序列号/破解码】[通俗易懂]

    mac phpstorm激活码2021【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    40

发表回复

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

关注全栈程序员社区公众号