我有一個數據庫,其中有很多字符串列。我應該使用NVARCHAR(MAX)還是將字符串限制爲最大值,如NVARCHAR(100)等?我真正想知道的是,如果我將列設置爲NVARCHAR(MAX),並且該列的所有值都爲100個字符或更少,那麼通過將該列設置爲NVARCHAR(100)可以節省空間嗎?關於使用NVARCHAR(MAX)
我知道空間並不是這裏唯一的問題,數據的「驗證」也很重要,但我只是問空間問題。
我有一個數據庫,其中有很多字符串列。我應該使用NVARCHAR(MAX)還是將字符串限制爲最大值,如NVARCHAR(100)等?我真正想知道的是,如果我將列設置爲NVARCHAR(MAX),並且該列的所有值都爲100個字符或更少,那麼通過將該列設置爲NVARCHAR(100)可以節省空間嗎?關於使用NVARCHAR(MAX)
我知道空間並不是這裏唯一的問題,數據的「驗證」也很重要,但我只是問空間問題。
它不會節省空間,因爲nvarchar
字段的大小取決於輸入數據的大小,而不是字段定義。根據documentation。
存儲大小,以字節爲單位,是輸入的數據的兩倍的實際長度+ 2個字節
你會設置大小限制的原因是爲了驗證該數據是大小或更小,因爲這就是你的邏輯數據模型所規定的。
你知道你不能索引nvarchar(max)類型的列嗎?因此,您無法優化此列上的查詢。沒有大小的影響,一致認爲,但肯定會有潛在的性能影響。
另請注意,在一定大小的列存儲在行外,因此讀取它將會增加額外的perf命中。
如果你擔心在插入時收到錯誤,一般的解決方法可以是:
下面是討論這個的問題更多detail。
您應該將列的長度限制爲可能的最大/合理(取決於具體情況)您打算在其中放置的數據的長度,以阻止將不正確的數據放入數據庫。這個限制取決於你。空間不應該是一個考慮因素。 – Ben 2013-02-15 10:46:50
你提出了一個非常有用的觀點 - 我只是想知道空間問題。 – 2013-02-15 10:47:34