1

場景:有兩個表。 Table1包含用戶,Table2包含愛好 用戶可以有多個愛好(20-40)。用戶數超過10萬。基於性能和數據處理在SQL Server中存儲數據的逗號分隔值與多行方法

方法1.創建一個用戶愛好表,其中列1作爲用戶ID和列2作爲愛好,並將愛好存儲爲逗號分隔值。它減少了行數。例如,它有10萬個用戶,每個用戶至少有20個興趣愛好,行數仍將爲10萬。但它違反了規範化原則。

方法2.第1列作爲用戶ID和第2列作爲愛好,併爲每個愛好存儲新行。在這種情況下,如果有10萬用戶,總行數將爲200萬,但遵循標準化原則。

考慮性能和數據處理的簡便性,哪一種方法更好?

+2

方法2會更好。我認爲你應該看看這個鏈接更詳細http://stackoverflow.com/a/39724908/7967350his – Saveen

+4

***永遠不會***在一個單元格中存儲多個值!期。這違背了**關係設計的基本原則,並且從長遠來看會導致你無盡的悲傷和麻煩。你一定要堅持關係設計的三種常規形式 - 把一個以上的值放入一個單元格中,這已經違反了第一個正常形式** –

+0

@marc_s我同意但我對於音量數據的。 –

回答

0

由於規範化和適當的索引,方法2會更好。由於您擁有sql server 2012,因此如果插入頻率較低且閱讀頻率較高,則可以選擇非聚集列存儲索引。非羣集ColumnStore索引內部應用壓縮,從而使IO更快。

在方法2,你可以爲了有更快的IO,這將是比IO快,同時處理逗號分隔值作爲方法1

應用的壓縮,但如果你有需要這個逗號經常UI要求 - 在UI中顯示的分隔值,然後你仍然考慮方法1,但缺點是你的插入/更新將會非常緩慢,因爲你需要一個用逗號分隔的自定義方法,如果你有一個正常的檢索,那麼這將是非常因爲你可能需要在那個時候解析。

相關問題