我有一个巨大的表(数百万条记录),其中几百到几千个用布尔字段标记(值= 1而不是0)。
我只关心真实的记录(值= 1)。有没有办法创建一个只能“索引”这些记录的索引?我应该使用什么样的指数?
select count(*)
from records
where boolean_field = 1
环境:Oracle 10g(但我也对其他dbms的评论感兴趣)
谢谢!
答案 0 :(得分:4)
如果您可以将“false”值设为null而不是0,那么您将获得所需的结果。
否则,您可以创建一个基于函数的索引,如下所示:
create index idx on recors (case boolean_field when 1 then 1 end);
这只会对1进行索引,但对于Oracle在查询中使用它,您的查询必须如下:
select * from records where case boolean_field when 1 then 1 end = 1;
答案 1 :(得分:1)
这似乎是oracle中位图索引的典型案例。
create bitmap index bool_field_index on recors(boolean_field)
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_5010.htm#i2062403