nvarchar (50)和nvarchar (max)的含义及影响

25
如果下面两个表的唯一区别是nvarchar(50)nvarchar(max),并且每个字段中的字符串长度为1到50个字符,那么这两个表的一般存储和性能差异是什么?这是在SQL Server 2005中的情况。 表1
firstname nvarchar (50)
lastname nvarchar (50)
username nvarchar (50)

表格2

firstname nvarchar (max)
lastname nvarchar (max)
username nvarchar (max)

3
请阅读这篇文章 - Bogdan Sahlean
另一个比较:http://sqlhints.com/2013/03/10/difference-between-sql-server-varchar-and-varcharmax-data-type/ - NoChance
1
请务必阅读此文章:为什么使用VARCHAR(n)已经没有意义了?,了解在编程中使用varchar(n)varchar(max)的区别及其重要性。 - marc_s
1
@JamesNicholson - nvarchar 使用的空间是 varchar 的两倍,除非使用压缩,但对于过度声明列宽的反对理由对于两者都是一样的。 - Martin Smith
显示剩余2条评论
3个回答

31

如果保证字符串长度在1到50个字符之间,则使用varchar(X)而不是varchar(MAX)运行相同查询将更快,即使在长度为X的字符串上运行。此外,您无法在varchar(MAX)字段上创建索引。

一旦行中的值超过8000个字符长度,就需要考虑其他性能问题(行基本上被视为TEXT而不是varchar(n))。尽管这与长度超过8000的字符串没有varchar(N)选项并不相关。


X不是字符数,而是字节数。 - Utkan Gezer

8

首先,你将无法在(最大)长度列上创建索引。因此,如果你要存储可搜索的数据,即这些列将成为WHERE谓词的一部分,可能无法提高查询性能。在这种情况下,你可能需要考虑全文搜索和对这些列进行索引。


这是一个不错的开始。你能想到在决定使用nvarchar(n)和nvarchar(max)之间应该考虑的其他事情吗? - nicholsonjf

-2

nvarchar max是用于长度不超过2GB的列。因此,它会占用更多的资源。如果您知道您不需要那么多的空间,最好使用nvarchar(50)。每个字符大约占用2个字节,所以2GB就是10亿个字符...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接