2013-07-04 35 views
2

我正在尋找關於如何在SQL Server 2012數據庫中存儲「數組」和「字典」類型信息的建議。到現在爲止,我已經使用XML類型,因爲我可以很容易地查詢這個已經,並且它們可以被簡單地表示,如:在SQL Server中存儲「字典」和「數組」

<Array><i>1</i><i>2</i><i>3</i></Array> 
<Dictionary><Item1>Value1</Item1><Item2>Value2</Item2></Dictionary> 

到現在爲止,我認爲XML數據類型將受益PAGE壓縮,但今天我意識到情況並非如此。這是一個相當大的問題,因爲數據庫每天都會存儲數以十萬計的這些記錄,而且似乎很多數據都是這個未壓縮的XML。

所以我正在尋找解決方法。我想我可能會列出這些數據。例如,數據字典表:

[ID] bigint PK, 
[OwnerID] bigint, 
[Name] varchar(32), 
[Value] varchar(32) 

和陣列:

[OwnerID] bigint PK 
[Index] int PK 
[Value] varchar(32) 

這工作,但我很擔心如何「可查詢」這種方法是 - 即「WHERE對象ID的X字典正確= Y'。我可以爲此寫一個標量函數,但是我知道會導致性能問題。

我已經閱讀了這個特定的問題,但一般的共識似乎是'使用xml列,不用擔心',但考慮到我需要的數據量,我不'我認爲這對我來說是一種選擇。

任何意見或見解將非常感激。

+0

你有多少數據?我正在做一個類似的方法,我達到了10GB的數據。我正在使用.exists()和主要和次要索引。 –

回答

2

XML列是BLOB,允許它的查詢...

至於我記得,並且至少到SQL2008R2,當你要對XML列微軟建議只使用其中零星搜索它,我認爲這遠非如此。

你的數據似乎是高度規範化的,所以如果你對錶格有很好的索引,我建議你去表格那裏指出。

無論如何,如果您每月要有數千萬行,我寧願建議您對錶進行分區以進一步提高性能。

最後,從磁盤使用的角度來看,並且由於您正在規劃這樣的卷,所以存儲不應該是一個問題,它應該是一個需求(IMO)。

+0

我測試了每個選項並得出結論,單獨的表格方法可能是最好的。獲取單個字典項目時,它通常比XML列慢,但壓縮時表格要小得多。 – Barguast