2015-08-18 59 views
0

我有一個存儲數百萬行的SQL Server 2008數據庫。有幾個NVARCHAR列從不超過列的當前最大長度,也不會因應用程序限制而接近它。減少我的NVARCHAR列的大小有什麼好處

即 Address NVARCHAR字段的長度爲50個字符,但不會超過32個字符。

是否有性能優勢,或節省空間的好處給我減少了nvarchar列的大小就是它的實際最大長度將(在地址字段,32個字符的情況下,即)。或者它會不會有所作爲,因爲它是一個可變長度字段?

+2

沒有任何性能優勢,但它可以幫助實施業務規則。如果你想確保數據**從不**超過32個字符,那麼設置限制是個好主意。例如,如果您想使用固定寬度的文本框來顯示它,那麼這將是確保您的文本不會被切斷的好方法。 –

回答

2

設置NVARCHAR中的字符數主要用於驗證目的。如果出於某種原因您不希望數據超過50個字符,那麼數據庫將通過不允許額外的數據爲您執行該規則。

如果總行大小超過閾值,那麼它可能會影響性能,所以通過限制長度,您可以通過不允許行大小超過該閾值來獲益。但就你而言,這似乎並不重要。 原因是SQL Server可以將更多的行放到頁面上,從而減少磁盤I/O並將更多行存儲在內存中。

另外,SQL Server中的最大行大小爲8KB,因爲這是頁面的大小,行不能跨越頁面邊界。如果插入的行超過8KB,則額外的數據將存儲在行溢出頁面中,這可能會對性能產生負面影響。

2

將您的n/var/char列定義減少到其最大長度沒有預期的性能或節省空間的好處。但是,可能還有其他好處。

  • 列不會意外有插入,而不會產生一個錯誤(可取的設計良好的系統中的「快速失敗」特性)長的值。

  • 該列與下一位開發人員溝通,檢查表中有關數據的內容,這有助於理解。沒有開發人員會對數據的用途感到困惑,並且不得不浪費時間來確定代碼的字段驗證規則是否錯誤,或者列定義是否錯誤(因爲它們邏輯上應該匹配)。

  • 如果您的專欄需要延長篇幅,您可以預先確定潛在的後果。熟悉數據庫的專業人員可以利用此機會來查看即將到來的需要新列長度的值是否會對現有行或查詢性能產生負面影響 - 因爲每行數據量會影響讀取次數需要滿足查詢。

相關問題