Индексы базы данных, которые охватывают только одно значение - PullRequest
3 голосов
/ 02 сентября 2011

У меня есть огромная таблица (миллионы записей), в которой от нескольких сотен до нескольких тысяч помечены логическим полем (значение = 1 вместо 0).

Я забочусь только о записях, которые соответствуют действительности (значение = 1). Есть ли способ создать индекс, который только «индексирует» эти записи? Какие индексы мне следует использовать?

select count(*) 
from records 
where boolean_field = 1

Среда: Oracle 10g (но меня также интересуют комментарии о других БД)

Спасибо!

Ответы [ 2 ]

4 голосов
/ 02 сентября 2011

Если бы вы могли сделать ваше "ложное" значение равным нулю, а не 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 голос
/ 02 сентября 2011

Это похоже на типичный случай для растровых индексов в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...