首页 > 解决方案 > SQL Server:为最有效的大小创建表列

问题描述

我的 SQL Server 数据库是由一名自由开发人员创建和设计的。

我看到数据库变得非常大,我想确保列数据类型在保持尽可能小的大小方面是最有效的。

大多数列被创建为

VARCHAR (255), NULL

这涵盖了他们所在的地方

然后有许多列是字母数字的,最多 10 个字母数字字符,最多 25 个。

有一个大的字母数字列,最多可包含 300 个字符。

对一个列进行了修正,该列显示了以秒为单位的比赛时间。小于 1000 秒,最多保留 2 个小数位

这设置为DECIMAL (18,2) NULL

问题是我可以通过更改列数据类型来减小数据库的大小,还是原始设计最适合目的?

标签: sql-serverdatabase-design

解决方案


您绝对应该努力为所有列使用最合适的数据类型 - 在这方面,自由开发人员做得非常糟糕 - 从一致性可用性的角度来看(只需尝试总结VARCHAR(255)列中的数字,或者按它们的数值排序 - 糟糕的设计......),但也从性能的角度来看。

  • 最大长度为 2 个数字的数字
  • 长度永远不会超过 3 个数字或空白的数字

-> 如果你不需要任何小数点(只有整数) - 使用INT

  • 仅包含 1 个字母或空白的 Alpha

-> 在这种情况下,我会使用 a CHAR(1)(或者NCHAR(1)如果您需要能够处理 Unicode 字符,如希伯来语、阿拉伯语、西里尔语或东亚语言)。由于它实际上只有 1 个字符(或什么都没有),因此没有必要或没有必要使用可变长度字符串数据类型,因为每个存储的字符串只会增加至少 2 个字节的开销

  • 有一个大的字母数字列,最多可包含 300 个字符。

-> 这是列的绝佳候选者VARCHAR(300)(或者再次:NVARCHAR(300)如果您需要支持 Unicode)。在这里,如果您真的想存储更少的字符,我肯定会使用可变长度的字符串类型来避免用空格填充列直到定义的长度。


推荐阅读