我有一個對象(恰好是C#),其中大約有20個屬性是可空的布爾值。可能會有數百萬個這樣的對象持久存在SQL數據庫中(目前SQL Server 2008 R2,但將來可能需要支持MySQL)。實例本身相對較大,因爲它們包含一段文本以及一些其他不相關的屬性。在SQL中存儲多個可空布爾值的策略
對於給定的對象實例,大多數屬性大多數時間將是null。
當用戶搜索這些對象的實例時,他們將選擇可能爲空的布爾屬性的1-3,並搜索其中至少有一個屬性爲非空(OR搜索)的實例。
我的第一個想法是將該對象持久化爲一個帶有可爲空的BIT列的單個表,表示可空的布爾屬性。但是,此策略需要每個BIT列一個索引,以避免在搜索時執行表掃描。此外,每個索引不會特別選擇,因爲每個索引只有三個可能的值。
有沒有更好的方法來解決這個問題?
您可以考慮使用位向量但它會存儲空值的挑戰。 – Kash
我幾乎想說創建另一個表來存儲非空值,因爲大多數屬性在大多數情況下都是空的。這應該減少你的索引大小。 – Kermit