SQL> create table nulltest(c1 varchar2(10),c2 varchar2(10), n1 number);
表已创建。
SQL> create unique index uidx_nulltest_01 on nulltest(c1,c2);
索引已创建。
SQL> insert into nulltest values('a','b',2);
已创建 1 行。
SQL> insert into nulltest values('a',null,3);
已创建 1 行。
SQL> insert into nulltest values(null,'b',4);
已创建 1 行。
SQL> insert into nulltest values(null,null,5);
已创建 1 行。
SQL> insert into nulltest values(null,null,6);
已创建 1 行。
SQL> insert into nulltest values(null,null,7);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select c1,c2,count(*),sum(n1) from nulltest group by c1,c2;
C1 C2 COUNT(*) SUM(N1)
---------- ---------- ---------- ----------
3 18
b 1 4
a b 1 2
a 1 3
在考虑唯一性时,(NULL,NULL)与(NULL,NULL)并不相同。对于聚集来说,(NULL,NULL)与(NULL,NULL)则认为是相同的。
SQL> analyze index uidx_nulltest_01 validate structure;
索引已分析
SQL> select name,lf_rows from index_stats;
NAME LF_ROWS
------------------------------ ----------
UIDX_NULLTEST_01 3
索引里只有三个leaf,对于全部为NULL的key,索引并不存储。所以对于 SELECT * FROM nulltest WHERE c1 IS NULL 或SELECT * FROM nulltest WHERE c1 IS NULL AND c2 IS NULL。
虽然c1,c2有建UNIQUE KEY,但是对于这种查询,并不会用到索引。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11411056/viewspace-733377/
,如需转载,请注明出处,否则将追究法律责任。