首页 > 其他 > 详细

让索引包含null值的两种方法

时间:2014-02-15 16:31:35      阅读:353      评论:0      收藏:0      [点我收藏+]

1. 把有NULL值的列与一个常数,或者一个带有not null约束的列一同索引

create index ind_01 on t01(col01,1);

或者

create index ind_01 on t01(col01,col02); --col02 必须带有NOT NULL约束.

 

下面是例子:

CREATE TABLE TAB (COL1 NUMBER, COL2 NUMBER NOT NULL);
INSERT INTO TAB SELECT CASE WHEN ROWNUM<=10 THEN NULL ELSE OBJECT_ID END,OBJECT_ID FROM ALL_OBJECTS;

create index testx on tab(col1,col2);

EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,‘TAB‘);

SELECT * FROM TAB WHERE COL1 IS NULL;

Execution Plan
----------------------------------------------------------
Plan hash value: 546044058

--------------------------------------------------------------------------
| Id  | Operation        | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT |       |     1 |     9 |     1   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| TESTX |     1 |     9 |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("COL1" IS NULL)

 

2.  把一个例上面的NULL值进行索引,非NULL值不索引,这样建立的索引会非常小,查询效率很高.

但是在写SQL的时候,需要注意谓词条件必须与函数一致.

create index ind_01 on t01(decode(col01,null,1,null));

 

第一种方法适合用在除了NULL,其它的值也要用索引的情况。
第二种方法适用用在只对NULL值会用到索引,所以这个索引会很小。

END-

让索引包含null值的两种方法

原文:http://www.cnblogs.com/princessd8251/p/3550471.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!