【问题标题】:Implications of nvarchar (50) vs nvarchar (max)nvarchar (50) 与 nvarchar (max) 的含义
【发布时间】:2013-12-12 07:49:17
【问题描述】:

如果下面两个表的唯一区别是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)

【问题讨论】:

  • 请阅读此article。
  • 另一个比较:sqlhints.com/2013/03/10/…
  • @EmmadKareem 那篇文章讨论了 varchar(8 位代码页),我的问题与 nvarchar(unicode 兼容)有关
  • 也请阅读这篇文章:What's the Point of Using VARCHAR(n) Anymore?,了解为什么真的很重要无论您是否一直使用varchar(n) 还是varchar(max)...
  • @JamesNicholson - nvarchar 使用的空间是 varchar 的两倍,除非使用压缩,但反对过度声明列宽的论点对于两者来说完全相同。

标签: sql sql-server database sql-server-2005


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果保证字符串的长度在 1 到 50 个字符之间,那么使用 varchar(X) 与 varchar(MAX) 对最长为 X 的字符串运行相同的查询会运行得更快。此外,您不能在 varchar(MAX) 字段上创建索引。

    一旦您的行的值长度超过 8000 个字符,则需要考虑额外的性能考虑(这些行基本上被视为 TEXT 而不是 varchar(n))。虽然这与比较并不是非常相关,因为长度超过 8000 的字符串没有 varchar(N) 选项。

    【讨论】:

    • X 不是 afaik 的字符数,而是字节数。
    【解决方案3】:

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

    【讨论】:

    • 这是一个好的开始。在决定 nvarchar(n) 和 nvarchar(max) 时,您还能想到哪些其他人应该考虑的因素?
    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多