问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql查询null的3种方式的区别?

发布网友 发布时间:2022-04-08 04:12

我来回答

6个回答

懂视网 时间:2022-04-08 08:34

  for i in 1..9999 loop

    insert into n1 values(i,‘name‘||i);

    if mod(i,100)=0then

      commit;

    end if;

  end loop;

  insert into n1(sid)values(10000);

  commit;

end;

查询sname列值走的是索引范围扫描

SQL> explain plan for select * from n1 where sname = 'name1';
Explained.

SQL> select * from table(dbms_xplan.display);
Plan hash value: 3644017351
--------------------------------------------------------------------------------
| Id | Operation	 | Name 	| Rows	| Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT |		| 1 | 75 | 2 (0)| 00:00:01
|
|* 1 | INDEX RANGE SCAN| N1_SNAME_IND | 1 | 75 | 2 (0)| 00:00:01
|
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
 1 - access("SNAME"='name1')
Note
-----
 - dynamic sampling used for this statement (level=2)


is null方式查询,虽然sname中为null的记录1W行中只有一行,但还是没有走索引,也就是说is null不走索引。

SQL> explain plan for select * from n1 where sname is null;
Explained.

SQL> select * from table(dbms_xplan.display);
Plan hash value: 2416923229
--------------------------------------------------------------------------
| Id | Operation	 | Name | Rows | Bytes | Cost (%CPU)| Time	 |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT |	 | 1 | 75 | 9 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| N1	 | 1 | 75 | 9 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
 1 - filter("SNAME" IS NULL)
Note
-----
 - dynamic sampling used for this statement (level=2)
17 rows selected.


如果实际情况确实需要is null查询走索引呢?可通过创建联合索引的方式来实现。

drop index n1_sname ;

create index n1_sname_ind on n1(sname,sid);

 

SQL> explain plan for select * from n1 where  sid is not null and sname is null ;

SQL> select * from table(dbms_xplan.display);
Plan hash value: 3644017351
-------------------------------------------------------------------------------
| Id | Operation	 | Name 	| Rows	| Bytes | Cost (%CPU)| Time
|
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT |		| 1 | 75 | 3 (0)| 00:00:01
|
|* 1 | INDEX RANGE SCAN| N1_SNAME_IND | 1 | 75 | 3 (0)| 00:00:01
|
-------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
 1 - access("SNAME" IS NULL)
 filter("SID" IS NOT NULL)
Note
-----
 - dynamic sampling used for this statement (level=2)

18 rows selected.

可以看到创建联合索引后,SQL查询所耗费的资源明显降低。

需要注意的是我们查询最频繁最经常使用列,比如sname要放在联合索引的第一列;同时要走联合索引,需要where后面的条件出现联合索引包含的所有的字段,这也是为什么加了sid这个字段的原因。




 

版权声明:本文为博主原创文章,未经博主允许不得转载。

SQL中的null

标签:

热心网友 时间:2022-04-08 05:42

sql查询null的3种方式的区别是xx字段所存值和判断语法不同:

where XX ='NULL'   ,XX字段存的值就是NULL这四个字符; 

where XX is null  ,XX字段什么也没存,这是数据库的判断语法;

where isnull(XX),XX字段什么也没存,这是界面开发语言的判断语法。

定义:QL NULL 值是指如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。NULL 值的处理方式与其他值不同。NULL 用作未知的或不适用的值的占位符。

操作方法:使用 IS NULL 操作符:SELECT LastName,FirstName,Address FROM Persons选取在 "Address" 列中带有 NULL 值的记录。



热心网友 时间:2022-04-08 07:00

第一种 where XX ='NULL' ,XX字段存的值就是NULL这四个字符,
第二种 where XX is null ,XX字段什么也没存,这是数据库的判断语法,
第三种 where isnull(XX),XX字段什么也没存,这是界面开发语言的判断语法追问select isnull(日期,getdate()) from test1 我查询出来的结果为什么列名是:No column name呢?

追答select isnull(日期,getdate()) as tmpdate from test1

热心网友 时间:2022-04-08 08:34

第一种 where XX ='NULL' ,XX字段存的值就是NULL这四个字符,这个XX会占据空间
第二种 where XX is null ,XX字段什么也没存,这是数据库的判断语法,这个XX是不会占据空间的追问select isnull(日期,getdate()) from test1 我查询出来的结果为什么列名是:No column name呢?

热心网友 时间:2022-04-08 10:26

第二种 where XX is null 是标准的
第三种 where isnull(a,b) 是当a是null时用b代替a追问select isnull(日期,getdate()) from test1 我查询出来的结果为什么列名是:No column name呢?

追答isnull(日期,getdate()) 表示当 日期 列是null的话用 getdate() 取的日期代替,No column name 表示 日期 列没有null的

热心网友 时间:2022-04-08 12:34

直接用
LEN(xx)>0
或者
LEN!=''
判断试试吧
is null不一定好用
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...DE分别在BC AC上,且AE=CD,连接AD,BE交于点p 过B作BQ⊥AD Q为垂足... ...AC上的点,且AE=CD 连接AD BE 交于点P 作BQ垂 ...ac上的点,且ae=cd,连接ad、be交于点p作BQ⊥AD,垂足为Q,求证BP=2... ...AC上的点,且AE=CD,链接AD、BE交于点P,作BQ⊥AD ...AC上的点,且AE=CD,连结AD、BE交于点P,作BQ⊥AD,垂足为Q. ...刚刚大学毕业。由于生病,导致目前没有工作,大学四年的女友也因为我... 形容“荷花的特点”有什么词语 梦见比人还高大的石头蛤蟆,杀人拆房子。我和其他人一起翘辫子了._百度... 梦见别人送我一条蛇,我却把他不小心放了.可是我用石头打了它一下... 作文 我生活在鼓励中 科技发展:利大还是弊大?(作文) 人教版小学六年级下册语文第五单元辩论会科技发展利和弊 六年级作文:科学的发展是利大还是弊大 语文s版六年级下册第五单元口语交际 六年级下册语文科技发展是利大还是弊大 为什么气温高度变化会影响大气的稳定性? 人为什么会受到天气的变化情况的影响? 全球变暖利大还是弊大? 小黄车ofo摩拜哈啰共享单车和全球十大自行车品牌排行榜FRW辐轮王,Marmot土拨鼠,TYRELL泰勒区别是什么? 人间喜剧里的小黄车是什么车 ofo与小黄人合作推出了什么单车? 一个小黄车的车标是smort是什么车? 关于小黄车ofo摩拜哈啰共享单车是什么?小黄车ofo摩拜哈啰共享单车品牌及FRW辐轮王,Marmot土拨鼠, 小黄车小绿车小红车都统一称为什么车 三相四线变压器是什么?重要组成部件举例 两个苹果手机开启定位共享,若其中一方将自己SIM卡拔出换成另一张,对方知道吗?_百度问一问 苹果手机定位关了对方能看到吗- 问一问 两个斜率乘积是1(互为倒数)说明什么啊? 同上 两直线垂直,则其斜率乘积为多少 进QQ空间的捕鱼假日游戏一按开始就游戏就白屏了怎么办 纸币撕坏了可以去银行换吗 妹妹是聋哑人韩雪是姐姐这是一部什么电视剧 超级兵王里后来怎么没有出现叶谦的妹妹韩雪? 有个特种兵战友为了掩护自己牺牲临踪时候让他照顾自己的妹妹韩雪的小说 特种兵为了照顾战友妹妹叫韩雪小说 隐形眼镜的含水量高好还是低好? 选隐形眼镜的时候是不是挑含水量越高的越好? 隐形眼镜的含水量多少比较好 隐形眼镜含水量高,好吗? 隐形眼镜含水量高的好还是低的好? 隐形眼镜含水量高低问题? 急求移动硬盘数据免费恢复软件 隐形眼镜,含水量高的好,还是低的好? 孕妇不能吃什么河鲜 隐形眼镜含水量高好还是低点好 移动硬盘损坏数据怎么恢复回来 隐形眼镜含水量越高越好吗? 隐形眼镜含水量该如何选择 隐形眼镜含水量是越低越好,还是越高越好? 隐形眼镜含水量高好,还是低好