sql-server - SQL Server 中 varchar(n) 和 varchar(m) 之间的效率差异——这与 varchar(n) 和 varchar(MAX) 无关
问题描述
如果我在 SQL Server 中有一个我知道的列,通常约为 10 个字符。varchar(50)
让它涵盖我所有的案件有什么缺点吗?varchar(n)
和之间的效率、存储、计算/查询拉动是否有任何损失varchar(n+x)
?
注意:这不是 和 之间的varchar(n)
比较varchar(MAX)
。已经问过另一个问题。
解决方案
是的,“以防万一”过大可能会导致性能问题,即内存授予太高,因为它们基于每个值都是一半填充的假设。
但是,您需要在这种影响与其他潜在问题之间取得平衡:
- 如果大多数/所有值都超过一半,则使其“恰到好处”可能会导致内存授予过低。
- 为了以防万一,将其设置为5 倍似乎很多,但请考虑一下业务需求随着时间的推移而发展的可能性有多大。稍后更改列可能更具破坏性;不仅要考虑列本身,还要考虑所有可能受到影响的参数和变量定义、索引、约束等,以及必须更改以适应更大字符串的应用程序代码。
您应该做什么取决于您对这将永远保持的信心varchar(10)
。如果您不是很自信,您可能会考虑制作它,varchar(20)
或者将其varchar(32)
限制为当前的 10 要求(使用参数来插入过程和实际约束)。如果以后需求发生变化,您只需要移除约束,更改参数定义,然后应用程序就可以按照自己的节奏进行更改以开始支持更长的值。
推荐阅读
- sql - ORA-02270 外键,找不到故障
- html - Appcelerator Titanium:CSS 宽度不适用于百分比
- r - R Package无法访问“inst”文件夹中的内容
- ruby-on-rails - Rails:ActiveRecord where vs merge
- raspberry-pi - 覆盆子零上的Gammu
- java - Jboss EAP 7 - REST API 客户端的动态 SSL 身份验证
- python - 查找执行中的python程序的路径
- amazon-s3 - 无法从 EMR 上的 Flink 作业访问 S3
- bootstrap-4 - Bootstrap 的 Md 大小从分辨率 1200 像素开始
- javascript - 由于被 CORS 策略(javascript、html 和 css)阻止,程序在 Firefox 中运行但在 chrome 中无法运行