暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在Oracle中, IS NULL如何用到索引?

DB宝 2019-05-25
1557


题目部分

在Oracle中, IS NULL如何用到索引?


     

答案部分



IS NULL用于判断某一列中的值是否为空。当IS NULL作为WHERE条件的时候,该列是不会用到索引的,但是可以加伪列创建伪联合索引来使得IS NULL使用索引,看如下的例子:

 1SQL> CREATE TABLE TB_LHR_20160427(OBJ_ID,OBJ_NAME) AS  SELECT OBJECT_ID,OBJECT_NAME FROM DBA_OBJECTS;
2Table created.
3SQL> CREATE INDEX I_TB_OBJ_ID_0 ON TB_LHR_20160427(OBJ_ID);
4Index created.
5SQL> SET AUTOT ON
6SQLSELECT COUNT(*) FROM TB_LHR_20160427 WHERE OBJ_ID IS NULL;
7  COUNT(*)
8----------
9         0
10Execution Plan
11----------------------------------------------------------
12Plan hash value: 220746883
13--------------------------------------------------------------------------------------
14| Id  | Operation          | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
15--------------------------------------------------------------------------------------
16|   0 | SELECT STATEMENT   |                 |     1 |    13 |   122   (3)| 00:00:02 |
17|   1 |  SORT AGGREGATE    |                 |     1 |    13 |            |          |
18|*  2 |   TABLE ACCESS FULL| TB_LHR_20160427 |     5 |    65 |   122   (3)| 00:00:02 |
19--------------------------------------------------------------------------------------
20Predicate Information (identified by operation id):
21---------------------------------------------------
22   2 - filter("OBJ_ID" IS NULL)
23Note
24-----
25   - dynamic sampling used for this statement (level=2)
26SQLCREATE INDEX I_TB_OBJ_ID ON TB_LHR_20160427(OBJ_ID,-1);
27Index created.
28SQL> SET AUTOTRACE TRACE EXP
29SQLSET LINE 9999
30SQLSELECT COUNT(*) FROM TB_LHR_20160427 WHERE OBJ_ID IS NULL;
31Execution Plan
32----------------------------------------------------------
33Plan hash value: 3872560566
34---------------------------------------------------------------------------------
35| Id  | Operation         | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
36---------------------------------------------------------------------------------
37|   0 | SELECT STATEMENT  |             |     1 |    13 |    13   (0)| 00:00:01 |
38|   1 |  SORT AGGREGATE   |             |     1 |    13 |            |          |
39|*  2 |   INDEX RANGE SCAN| I_TB_OBJ_ID |     4 |    52 |    13   (0)| 00:00:01 |
40---------------------------------------------------------------------------------
41Predicate Information (identified by operation id):
42---------------------------------------------------
43   2 - access("OBJ_ID" IS NULL)
44Note
45-----
46   - dynamic sampling used for this statement (level=2)

& 说明:

有关NULL和索引的更多内容可以参考我的BLOGhttp://blog.itpub.net/26736162/viewspace-2141337/





本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。



---------------优质麦课------------

 详细内容可以添加麦老师微信或QQ私聊。



About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:618766405

 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

DBA宝典

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

喜欢就点击“好看”吧



文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论