2012-10-11 43 views
3

我正在設計一個表。有幾個比特列彼此不相關。使用位掩碼來存儲不相關的位列

我正在考慮只將這些列合併到一個通用的ATTRIBUTES INT位掩碼列中。

現在,我試圖說服自己,這是一個壞主意。這看起來像一個反模式。如果我晚些時候需要另一個字段,這可能爲我節省一些時間,但除此之外還有其他好處嗎?

如果我有一個位掩碼索引,我正在通過ATTRIBUTES & 128 = 128進行搜索,那麼我懷疑它效率不高。索引將按照整個值排序,而不是按位排序。所以,我認爲它實際上只需要掃描整個索引而不是知道去哪裏。

這聽起來沒錯嗎?這是一個可怕的想法?

感謝, Tedderz

+4

這是一個很好的缺點。你腦子裏有什麼專業人士? –

+0

個人我會保持他們分開。它需要更多時間來設置,但這樣其他人將來可以更容易地學習您的數據庫。這是我所知最重要的唯一主要區別。 –

+0

下次需要添加另一列時,無需更新我的所有架構腳本,sprocs和業務對象,這是我能想到的唯一真正的好處。 – Tedderz

回答

4

使用位掩碼柱使得

  • 代碼難以閱讀和維護
  • 指數不可能使用

也違反了數據庫的正常形式設計。

由於SQL Server可以將多個位列壓縮爲單個字節,因此您不會購買空間。

但是,由於位列自然不是很有選擇性,所以索引的使用在這裏也許不是有利的。

總的來說,單比特列的好處明顯超過了位掩碼列的好處。所以我幾乎在所有情況下都會使用單比特列。

+0

我的期望是一樣的。感謝您提供豐富的答案。 – Tedderz

+0

您可以對計算列進行索引(當然這也會否定優勢)。 – usr