在数据库设计中夸大字段大小

12 sql-server

我的表中有一些字段是字符串,目前,大多数字段大小都有很高的字符限制。例如,街道名称为 100 个字符。使用大字段大小是否有惩罚?例如,如果我将此字段的限制更改为 30 个字符,是否会提高性能或提高效率?大约有 50 个字段可以作为收缩的候选对象。

感谢您的建议。

JNK*_*JNK 16

如果你在谈论varcharnvarchar则没有,也没有罚则,以允许更高的字段长度。


但要记住一些警告:

  • 对于可变长度字段(每个字段),每行有 2 个字节的开销。如果您的字段非常短,则使用CHAR. Varchar(2)例如,实际上每行使用 2-4 个字节,而CHAR(2)始终使用 2个字节。
  • 很长的字段不能被索引。 索引键集中所有字段的最大长度为 900 字节。
  • 如果您允许的数据超出您的预期,您最终会得到意想不到的结果。 如果您允许街道名称包含 100 个字符,那么在某些时候其他数据可能会在您不知道的情况下进入该字段(例如整个地址)。如果大小合适,则可能会在插入时出现错误。
  • 允许非常宽的行可能会导致页面拆分和碎片化。 如果您的行超过 8k,则需要将其拆分为多个数据页。其中很多确实会损害性能。 一般来说,更窄更有效。

  • [可能会有罚款](http://stackoverflow.com/questions/2009694/is-there-an-advantage-to-varchar500-over-varchar8000/5654947#5654947) (2认同)