首页 > 解决方案 > SQL Server 中 varchar(n) 和 varchar(m) 之间的效率差异——这与 varchar(n) 和 varchar(MAX) 无关

问题描述

如果我在 SQL Server 中有一个我知道的列,通常约为 10 个字符。varchar(50)让它涵盖我所有的案件有什么缺点吗?varchar(n)和之间的效率、存储、计算/查询拉动是否有任何损失varchar(n+x)

注意:这不是 和 之间的varchar(n)比较varchar(MAX)。已经问过另一个问题。

相关但不同的问题: sql server 中 varchar(500) 与 varchar(max) 之间的区别

标签: sql-serverdatabaseperformance

解决方案


是的,“以防万一”过大可能会导致性能问题,即内存授予太高,因为它们基于每个值都是一半填充的假设。

但是,您需要在这种影响与其他潜在问题之间取得平衡:

  • 如果大多数/所有值都超过一半,则使其“恰到好处”可能会导致内存授予过低。
  • 为了以防万一,将其设置为5 倍似乎很多,但请考虑一下业务需求随着时间的推移而发展的可能性有多大。稍后更改列可能更具破坏性;不仅要考虑列本身,还要考虑所有可能受到影响的参数和变量定义、索引、约束等,以及必须更改以适应更大字符串的应用程序代码。

您应该做什么取决于您对这将永远保持的信心varchar(10)。如果您不是很自信,您可能会考虑制作它,varchar(20)或者将其varchar(32)限制为当前的 10 要求(使用参数来插入过程和实际约束)。如果以后需求发生变化,您只需要移除约束,更改参数定义,然后应用程序就可以按照自己的节奏进行更改以开始支持更长的值。


推荐阅读