ORACLE-017:SQL优化-is not null和nvl

标签: SQL优化 is not null nvl
2人阅读 评论(0) 收藏 举报
分类:

今天在优化一段sql,原脚本大致如下:

  1. select  a.字段n from tab_a a  
  2.   
  3. where  
  4.   
  5. a.字段2 is not null;  

a.字段2增加了索引的,但是查询速度非常慢,

于是做了如下修改:

  1. select  a.字段n from tab_a a  
  2.   
  3. where  
  4.   
  5. nvl(a.字段2,'0' ) != '0';  

速度提升很明显。

原因是什么呢?其实很简单,因为is null和is not null使字段的索引失效了。

虽然都知道哪些情形下会使索引失效,但是有时难免受业务需求的影响而考虑的不够全面,所以sql优化要时刻进行,随时进行。努力提高sql的执行效率。

查看评论

sql的空值null的判断和转换:NVL的用法

1.NULL空值概念    数据库里有一个很重要的概念:空值即NULL。有时表中,更确切的说是某些字段值,可能会出现空值, 这是因为这个数据不知道是什么值或根本就不存在。2.NULL空值判断    空...
  • yangodilxia
  • yangodilxia
  • 2011-05-24 16:21:00
  • 6900

SQL判断空值、nvl处理与JOIN的使用

LIKE子句会影响查询性能,所以在明确知道字符个数时,应该使用'_',而不使用'%'。 判断空值/非空值 SELECT select_list FROM table_list/view_list ...
  • jaketseng
  • jaketseng
  • 2006-12-29 00:00:00
  • 7410

NULL 值与索引(二)

在NULL值与索引(一)中讲述了null值与索引的一些基本情况。其主要的内容为,基于允许存在null值的索引列,其索引值不会被存储;其次是由于这个特性导致了我们在使用is null时索引失效的情形;最...
  • robinson_0612
  • robinson_0612
  • 2012-04-08 19:04:25
  • 8356

SQL语句---nvl、ifnull 用法(将null转代为0)

一  NVL函数是一个空值转换函数 NVL(表达式1,表达式2) 如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。 该函数的目的是把一个空值(...
  • qq_24549805
  • qq_24549805
  • 2016-07-12 21:17:26
  • 11188

oracle 性能优化操作六: 去掉Where子句中的IS NULL和IS NOT NULL

Where子句中的IS NULL和IS NOT NULL将不会使用索引而是进行全表搜索。 因此需要通过改变查询方式,分情况讨论等方法,去掉Where子句中的IS NULL和IS NOT NULL。...
  • HelloCqk1
  • HelloCqk1
  • 2015-01-06 08:57:22
  • 4051

使用NVL代替IS NULL OR IS NOT NULL,提高查询效率

最近工作的时候遇到了比较大的数据查询,自己的sql在数据量小的时候没问题,在数据量达到300W的时候特别慢,只有自己优化sql了,以前没有优化过,所以记录下来自己的优化过程,本次是关于is null和...
  • wohiusdashi
  • wohiusdashi
  • 2018-03-21 15:20:51
  • 11

深入SQLServer中ISNULL()和Oracle 的nvl()函数使用详解

ISNULL()函数语法 ISNULL ( check_expression , replacement_value) 参数 check_expression 将被检查是否为 ...
  • shenhonglei1234
  • shenhonglei1234
  • 2016-06-12 17:36:09
  • 6483

DELPHI的NULL函数,相当于MS SQL的ISNULL,ORACLE的NVL

a := ifthen(VarIsNull(b), 'null时的默认值', b); 引用StrUtils单元
  • wozengcong
  • wozengcong
  • 2015-01-20 13:24:42
  • 1595

ORACLE性能技巧测试:NVL与DECODE

1.典型的SQL语句如下 select decode(a,1,'yyy',2,'xxx') from t;   转换过程化后的语句是 IF a=1 THEN     'yyy' ELSIF a=2 T...
  • liyongweihaha
  • liyongweihaha
  • 2015-03-12 18:27:51
  • 927

Sql Server,Oracle 排序order by 数据有null的情况

【sqlserver】: sqlserver 认为 null 最小。 升序排列:null 值默认排在最前。 要想排后面,则:order by case when col is nul...
  • anihasiyou
  • anihasiyou
  • 2013-09-10 15:23:35
  • 1810
    个人资料
    持之以恒
    等级:
    访问量: 4万+
    积分: 798
    排名: 6万+
    文章存档
    最新评论