2011-03-18 104 views
6

在我的公司,我們有一個遺留數據庫,包含各種表格,因此有許多領域。數據庫(最大)字段長度是否會影響性能?

許多領域似乎有很大的限制(例如:NVARCHAR(MAX)),永遠不會達到。

是否任意設置字段的最大寬度或比正常輸入大2到3倍會對性能產生負面影響?

應該如何平衡性能與字段長度?有沒有平衡?

+0

不是很多 - 但你不能索引類型的列'VARCHAR( MAX)' - 列*可能*高達2 GB - 這可能是一個很大的缺點......(一個(MAX任何索引最多可以有900個字節有) - 那麼它不能在任何索引的一部分)相關 – 2011-03-18 14:27:59

+1

/複製http://stackoverflow.com/questions/4378795/sql-performance-is-there-any-performance-hit-using-nvarcharmax-instead-of-nvar – 2011-03-18 14:31:55

+0

可以的重複[varchar(max)無處不在?(http://stackoverflow.com/questions/2091284/varcharmax-everywhere) – Justin 2011-08-29 23:42:50

回答

7

有兩個部分這個問題:

是否使用NVARCHAR在VARCHAR傷害的表現?是的,將數據存儲在unicode字段中會使存儲要求翻倍。存儲在這些領域的數據爲2x它需要的大小(直到SQL Server 2008 R2中走了出來,其中包括unicode compression。你的表掃描需要兩倍的時間只有一半的數據可以存儲在內存中緩存

是否使用MAX會損害性能?不是直接的,但是當您使用VARCHAR(MAX),NVARCHAR(MAX)和這些類型的字段時,如果您需要索引表,您將無法在SQL Server 2005/2008/R2在線重建這些索引(Denali車型帶來了各地的MAX字段的表的一些改進等等一些指標可以重建在線)

+0

你不能索引'VARCHAR(MAX)'和相關的字段。 – Justin 2011-08-29 23:40:44

+1

對不起,我應該更具體一點:如果你需要索引這些表,你將無法在線重建這些索引。包含這些字段的表不能在SQL Server 2005/2008/2008R2中在線重新編制索引。 – 2011-08-30 01:12:06

2

是的,查詢優化器可以猜測頁面中有多少行,如果有大量的varchar字段比所需的大,SQL Server可以在內部猜測錯誤的行數。

+0

查詢優化器使用「有多寬行」,以估計「每多少行能適應頁'。 – 2011-03-20 07:54:30

-2

對於性能,大多數情況下答案爲否。 我認爲你可以從應用程序層面分析性能:收集數據,獲取需求,然後做一些分析。瓶頸可能由應用程序代碼,SQL或模式設計引起。

相關問題