tom写的书上不是有demo吗? create index inx_test on test(case when flag = 'N' then flag else NULL end); 或是: create index idx_test on test(decode(flag, 'N', flag));原理正如3楼所说: 在某列上加索引,如果该列有些记录值为NULL,则这些记录并不会在索引里有记录。
我刚才试了一下 create index idx_test on test(decode(flag, 'N', flag)); select * from test where flag='N' 看了计划 还是全表扫描,为什么呢?
要这样写:select * from test where decode(flag, 'N', flag) = 'N'
象你说的这种只有两个值(N,Y),在oracle里合适使用位图索引
create index inx_test on test(case when flag = 'N' then flag else NULL end);
或是:
create index idx_test on test(decode(flag, 'N', flag));原理正如3楼所说:
在某列上加索引,如果该列有些记录值为NULL,则这些记录并不会在索引里有记录。
create index idx_test on test(decode(flag, 'N', flag));
select * from test where flag='N'
看了计划 还是全表扫描,为什么呢?