奇怪的执行计划?

[复制链接]
查看11 | 回复9 | 2007-9-26 18:42:10 | 显示全部楼层 |阅读模式
我有个表,我在dept_num上建立索引,并写了个dept_num为空的行进去,想测试,当索引列有空值时候索引无效,但我发现索引并没有无效啊?这是什么原因?
SQL> select dept_num,dept_name from test3 ;
DEP DEPT_NAME
--- ----------
100 Mis
200 Check
test------------这行的dept_num这个字段为空
Elapsed: 00:00:00.12
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE
10 TABLE ACCESS (FULL) OF 'TEST3'


SQL> create index index_test3 on test3(dept_num) ;
Index created.
Elapsed: 00:00:00.03
SQL> analyze table test3 compute statistics ;
Table analyzed.
Elapsed: 00:00:00.01
SQL> analyze index index_test3 compute statistics ;
Index analyzed.
Elapsed: 00:00:00.04
SQL> select /*+index(test3 index_test3)*/ dept_num from test3 ;
DEP
---
100
200

Elapsed: 00:00:00.13
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=3 Bytes=9)
10 TABLE ACCESS (FULL) OF 'TEST3' (Cost=2 Card=3 Bytes=9)


SQL>
SQL> select dept_num,dept_name from test3 where dept_num='100';
DEP DEPT_NAME
--- ----------
100 Mis
Elapsed: 00:00:00.12
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=7)
10 TABLE ACCESS (BY INDEX ROWID) OF 'TEST3' (Cost=2 Card=1 By

tes=7)
21 INDEX (RANGE SCAN) OF 'INDEX_TEST3' (NON-UNIQUE) (Cost=1
Card=1)
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
正常呀,
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
为什么呢?
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
索引字段为空?索引仍然有效?
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
create index index_test3 on test3(dept_num)并不能说明 dept_num的值 一定不能为空。
索引列允许null,合法呀,索引有效
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
你的意思是说,除非是指定了该字段不能为空,否则即使为空,索引仍然有效?
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
索引有效。
你又没有规定字段非空。
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
索引允许NULL阿
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
呵呵
楼主不知道从那儿听来的理论,有点反了
select dept_num,dept_name from test3 where dept_num is null
这种情况没法用到索引
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
索引中不记录空值,所以如果此时使用索引查询就可能照成结果与实际不符,
所以此处oracle是不使用索引的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行