减小我的 NVARCHAR 列的大小是不是有好处
Posted
技术标签:
【中文标题】减小我的 NVARCHAR 列的大小是不是有好处【英文标题】:Is there a benefit to decreasing the size of my NVARCHAR columns减小我的 NVARCHAR 列的大小是否有好处 【发布时间】:2015-08-18 21:19:42 【问题描述】:我有一个存储数百万行的 SQL Server 2008 数据库。有几个 NVARCHAR 列永远不会超过列的当前最大长度,也不会因为应用程序限制而接近它。
即 地址 NVARCHAR 字段的长度为 50 个字符,但永远不会超过 32 个字符。
将 NVARCHAR 列的大小减小到它的 实际 最大长度(即在地址字段的情况下,32 个字符)对我有性能好处还是节省空间的好处。还是因为它是一个可变长度字段,所以它不会有所作为?
【问题讨论】:
没有任何性能优势,但可以帮助执行业务规则。如果您想确保数据从不超过 32 个字符,最好设置限制。例如,如果您想使用固定宽度的文本框来显示它,这将是确保您的文本不被截断的好方法。 【参考方案1】:在 NVARCHAR 中设置字符数主要用于验证目的。如果出于某种原因您不希望数据超过 50 个字符,那么数据库将通过不允许额外数据为您强制执行该规则。
如果总行大小超过阈值,则可能会影响性能,因此通过限制长度,您可能会因不允许行大小超过该阈值而受益。但在你的情况下,这似乎并不重要。 这样做的原因是 SQL Server 可以将更多行放入一个 Page,从而减少磁盘 I/O,并且可以将更多行存储在内存中。
此外,SQL Server 中的最大行大小为 8KB,因为这是一个页面的大小,并且行不能跨越页面边界。如果插入超过 8KB 的行,多余的数据将存储在行溢出页中,这可能会对性能产生负面影响。
【讨论】:
【参考方案2】:将n/var/char
列定义减少到最大长度不会带来预期的性能或空间节省优势。但是,可能还有其他好处。
该列不会意外插入更长的值而不会产生错误(对于精心设计的系统的“快速失败”特性来说是理想的)。
该列与下一个检查表的开发人员交流有关数据的信息,这有助于理解。开发人员不会对数据的用途感到困惑,并且不得不浪费时间确定代码的字段验证规则是否错误或列定义是否错误(因为它们在逻辑上应该匹配)。
如果您的列确实需要延长长度,您可以在事先确定潜在后果的情况下这样做。精通数据库的专业人员可以借此机会查看需要新列长度的即将出现的值是否会对现有行或查询性能产生负面影响——因为每行的数据量会影响读取次数需要满足查询。
【讨论】:
以上是关于减小我的 NVARCHAR 列的大小是不是有好处的主要内容,如果未能解决你的问题,请参考以下文章