减少我的 NVARCHAR 列的大小有好处吗
Is there a benefit to decreasing the size of my NVARCHAR columns
我有一个存储数百万行的 SQL Server 2008 数据库。有几个 NVARCHAR 列永远不会超过列的当前最大长度,也不会由于应用程序限制而接近它。
即
地址 NVARCHAR 字段的长度为 50 个字符,但绝不会超过 32 个字符。
将 NVARCHAR 列的大小减小到它的 实际 最大长度(即在这种情况下)对我有性能好处或 space 节省好处吗地址字段,32 个字符)。还是因为它是一个可变长度字段,所以不会有什么不同?
设置NVARCHAR的字符数主要是为了校验。如果出于某种原因您不希望数据超过 50 个字符,那么数据库将通过不允许额外数据来为您强制执行该规则。
如果总行大小超过阈值,则会影响性能,因此通过限制长度,您可以通过不允许行大小超过该阈值来获益。但就您而言,这似乎并不重要。
这样做的原因是 SQL 服务器可以在一个页面上容纳更多的行,这导致更少的磁盘 I/O 并且更多的行可以存储在内存中。
此外,SQL 服务器中的最大行大小为 8KB,因为这是一个页面的大小,行不能跨越页面边界。如果插入超过 8KB 的行,多余的数据将存储在行溢出页中,这可能会对性能产生负面影响。
将您的 n/var/char
列定义减少到其最大长度没有预期的性能或 space 节省的好处。但是,可能还有其他好处。
该列不会意外地插入更长的值而不会产生错误(对于设计良好的系统的 "fail fast" 特性来说是可取的)。
该专栏与下一位开发人员交流,检查 table 有关数据的一些信息,这有助于理解。开发人员不会对数据的用途感到困惑,而不得不浪费时间来确定代码的字段验证规则是否错误或列定义是否错误(因为它们在逻辑上应该匹配)。
如果您的专栏确实需要加长,您可以在事先确定潜在后果的情况下这样做。精通数据库的专业人员可以借此机会查看需要新列长度的即将到来的值是否会对现有行或查询性能产生负面影响——因为每行的数据量会影响读取次数需要满足查询。
我有一个存储数百万行的 SQL Server 2008 数据库。有几个 NVARCHAR 列永远不会超过列的当前最大长度,也不会由于应用程序限制而接近它。
即 地址 NVARCHAR 字段的长度为 50 个字符,但绝不会超过 32 个字符。
将 NVARCHAR 列的大小减小到它的 实际 最大长度(即在这种情况下)对我有性能好处或 space 节省好处吗地址字段,32 个字符)。还是因为它是一个可变长度字段,所以不会有什么不同?
设置NVARCHAR的字符数主要是为了校验。如果出于某种原因您不希望数据超过 50 个字符,那么数据库将通过不允许额外数据来为您强制执行该规则。
如果总行大小超过阈值,则会影响性能,因此通过限制长度,您可以通过不允许行大小超过该阈值来获益。但就您而言,这似乎并不重要。 这样做的原因是 SQL 服务器可以在一个页面上容纳更多的行,这导致更少的磁盘 I/O 并且更多的行可以存储在内存中。
此外,SQL 服务器中的最大行大小为 8KB,因为这是一个页面的大小,行不能跨越页面边界。如果插入超过 8KB 的行,多余的数据将存储在行溢出页中,这可能会对性能产生负面影响。
将您的 n/var/char
列定义减少到其最大长度没有预期的性能或 space 节省的好处。但是,可能还有其他好处。
该列不会意外地插入更长的值而不会产生错误(对于设计良好的系统的 "fail fast" 特性来说是可取的)。
该专栏与下一位开发人员交流,检查 table 有关数据的一些信息,这有助于理解。开发人员不会对数据的用途感到困惑,而不得不浪费时间来确定代码的字段验证规则是否错误或列定义是否错误(因为它们在逻辑上应该匹配)。
如果您的专栏确实需要加长,您可以在事先确定潜在后果的情况下这样做。精通数据库的专业人员可以借此机会查看需要新列长度的即将到来的值是否会对现有行或查询性能产生负面影响——因为每行的数据量会影响读取次数需要满足查询。