2011-03-18 495 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或模式设计引起。

相关问题