我需要存儲一個包含大量用戶定義字段(在編譯時不知道,但可能大約20到40個定製字段)的大型表(數百萬行)字段)。對於我來說,能夠根據這些自定義字段查詢數據是非常重要的(性能方面):即「選擇該屬性具有該值的行,該屬性是該值等。」。每個查詢都有20到30個WHERE子句。在SQL數據庫中實現用戶定義的字段並建立索引
我的想法而已:
更改數據庫模式,每次新的用戶字段來實現。將每個用戶定義的字段保留爲表格中的一列。在每個自定義創建的列上添加和維護索引。如何正確構建這些索引是一個大問題,因爲我不知道在WHERE查詢中將使用哪些屬性(列)。
將自定義字段存儲爲XML類型列。據我從SQL2005瞭解,我可以在XML類型的列中查詢XML。雖然不太確定表現。
Entity Attribute Value。這是我現在使用的,但這是一個痛苦。
有什麼建議嗎?
編輯: 一些關於我的要求的說明。我有一張桌子,40-50萬行(例如)ID號碼和與這些ID相關的各種屬性。
讓我們說20萬是有「CustomAttribute1」等於2,那麼500萬有「CustomAttribute2」等於「是」 300萬有「CustomAttribute20」等於「不」
I need a FAST method of returning all IDs where:
1. CustomAttribute1 = 2
2. CustomAttribute2 = 'Yes'
3. CustomAttribute4 = null
4. CustomAttribute20 != 'No'
etc...
我們有這實現了EAV:選擇查詢是實施和維護的噩夢,它需要很長時間才能返回結果,並且最令人討厭的是即使對於小數量的數據,DB也會擴展到巨大的大小,這很奇怪,因爲EAV本質上是規範化數據,但我認爲所有的指標占用一堆空間。
你能澄清你在做什麼,即表中有什麼樣的數據。此外,這些自定義字段是唯一的列嗎? –