2011-12-09 54 views
0

是否有人可以指示我們使用BITMAP用於存儲數據對象的100個類指示性(開/關)屬性的信息。例如,如果STATE表中的「California」記錄具有120個類似於指示器的屬性,並且這些屬性唯一標識加利福尼亞,那麼將這些指示器存儲在VARCHAR(2)字段中是否明智(假設64-位系統)?BITMAP索引用於存儲數據對象的100個類指示性屬性

我們使用120個屬性來解析加州的代理鍵。我們的DB是SQL Server。我們還在討論添加120個一個字符或一個位字段或一個VARCHAR(120)字段。

非常感謝您的幫助!

+0

在SQL Server中沒有像這樣索引位圖的內置支持。 [相關問題](http://stackoverflow.com/q/8126313/73226) –

回答

1

VARCHAR(2)存儲2個字符,而不是像64位平臺上的'128位'那樣。此外,內部表示也是爲了保證磁盤格式可以跨架構移植。 IE瀏覽器。 64位系統代表了與x86系統相同的VARCHAR(2)

如果要存儲位圖,那將是二進制數據,然後使用BINARY類型。您可以在BINARY(16)類型中表示120個屬性。這樣的存儲非常密集且節省空間,但是很難搜索和索引。雖然SQL Server支持bitwise operators,但是例如搜索這樣的位圖字段以檢索位7,位12關閉和位18開啓的所有記錄只能通過端到端大小的數據表掃描完成。

另外,不是使用BINARY(16)字段存儲120個單個位屬性,而是考慮在表中聲明120個BIT列。他們需要2位存儲空間(一位數據,一位可空),但是你的代碼會更清晰可讀,因爲它實際上操作了命名列而不是隱祕的按位操作。該解決方案的可分辨性與BINARY(16)相同(即沒有查找,只有表掃描)。

您還應該閱讀約sparse columnsfiltered indexes,這兩個概念很可能適用於您的設計。