仅涵盖一个值的数据库索引

时间:2011-09-02 12:16:24

标签: performance oracle oracle10g

我有一个巨大的表(数百万条记录),其中几百到几千个用布尔字段标记(值= 1而不是0)。

我只关心真实的记录(值= 1)。有没有办法创建一个只能“索引”这些记录的索引?我应该使用什么样的指数?

select count(*) 
from records 
where boolean_field = 1

环境:Oracle 10g(但我也对其他dbms的评论感兴趣)

谢谢!

2 个答案:

答案 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