2011-09-02 63 views
3

我有一個巨大的表(數百萬條記錄),其中幾百到幾千個數據由布爾字段(值爲1而不是0)標記。只包含一個值的數據庫索引

我只關心記錄是真實的(值= 1)。有沒有辦法創建一個只索引這些記錄的索引?我應該使用什麼樣的指數?

select count(*) 
from records 
where boolean_field = 1 

環境:Oracle 10g中(但我也很感興趣,對其他DBMS評論)

謝謝!

回答

4

如果你可以讓你的「假」值爲空而不是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

如果要基於函數的索引的路線,我會建議作出與出爐的情況下的邏輯視圖,並擁有一切查詢視圖,而不是表。這將有助於確保所有針對該表編寫查詢的人都能夠使用該索引。 – Craig

+0

我有點不喜歡這兩個變種,但我會去第一個!謝謝你的幫助! – reto

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

+1

位圖索引對DML造成很高的成本,導致它們不適合OLTP系統。而現在,即使是數據倉庫也可能會近實時更新,而不是批量模式。這並不意味着位圖索引不是一個可行的解決方案,只是它在某些情況下才會有幫助。 – APC

相關問題