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)
上一篇 2022年4月17日 下午6:00
下一篇 2022年4月17日 下午6:00


相关推荐

  • php将数组变成字符串,php怎样将数组转成字符串

    php将数组变成字符串,php怎样将数组转成字符串摘要 PHP 即 超文本预处理器 是一种通用开源脚本语言 PHP 是在服务器端执行的脚本语言 与 C 语言类似 是常用的网站编程语言 PHP 独特的语法混合了 C Java Perl 以及 PHP 自创的语法 下面是 php 怎样将数组转成字符串 让我们一起来看看 php 怎样将数组转成字符串的具体内容吧 php 怎样将数组转成字符串 php 将数组转成字符串的方法 可以利用 implode 函数来进行转换 implod

    2026年3月18日
    2
  • QT常见面试题,基础知识偏多

    QT常见面试题,基础知识偏多自定义控件:应该做过吧?能举几个例子吗?还有其他的吗?你觉得自定义控件的方法主要是哪些?答:从外观设计上:QSS、继承绘制函数重绘、继承QStyle相关类重绘、组合拼装等等从功能行为上:重写事件函数、添加或者修改信号和槽等等QSS:QSS平时使用的多吗?能举几个例…

    2022年6月25日
    92
  • Claude 4 正式发布,全网实测来了!(附升级教程)

    Claude 4 正式发布,全网实测来了!(附升级教程)

    2026年3月16日
    2
  • Java中toString方法作用

    Java中toString方法作用C 里面也有个 ToString 注意大小写的不同 Java 的 toString 的和 C 的 ToString 完全不是同一概念 首先 toString 是一个 自我描述 的方法 然后它可以被重写 java nbsp viewplaincop public nbsp class nbsp Person nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp private nbsp String nbsp na

    2026年3月20日
    2
  • AJAX(Asynchronous JavaScript And XML)

    AJAX(Asynchronous JavaScript And XML)

    2021年7月7日
    78
  • centos7怎么退出vi_centos7怎么退出vi

    centos7怎么退出vi_centos7怎么退出vi一、首先用vi命令打卡要编辑的文件:注意:vi命令的使用如下打开或新建文件,并将光标至于第一行首:[root@centos6/]#vi/etc/my.cnf打开文件,并将光标移至最后一行行首:[root@centos6/]#vi+/etc/my.cnf打开文件,并将光标置于第n行首:[root@centos6/]#vi+n/etc/my.cnf打开文件,并将光标置于第一个与pattern匹配的串处…

    2022年9月30日
    3

发表回复

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

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