SQL Server:创建最有效大小的表列

问题描述

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

我看到数据库越来越大,我想确保列数据类型在保持尽可能小的大小方面最有效。

大多数列创建为

VARCHAR (255),NULL

这涵盖了他们所在的地方

  • 最多2个数字的数字
  • 长度不能超过3个数字或空白的数字
  • 仅包含1个字母或为空白的字母

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

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

对某列进行了修改,该列显示了参加比赛的时间(以秒为单位)。在1000秒以内,最多2个小数位

此设置为DECIMAL (18,2) NULL

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

解决方法

对于所有列,您绝对应该努力使用最合适数据类型-在这方面,从一致性的角度来看,自由开发者的工作做得很差 strong>和可用性(只需尝试对VARCHAR(255)列中的数字求和,或按其数值排序-糟糕的设计...),而且从性能角度考虑视图。

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

->如果不需要任何小数小数点(仅整数)-请使用INT

  • 仅包含1个字母或为空的字母

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

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

->这是VARCHAR(300)列的最佳选择(或者,如果需要支持Unicode,则再次为NVARCHAR(300))。在这里,如果您确实想存储较少的字符,我肯定会使用 variable-length 字符串类型,以避免在列中填充不超过定义长度的空格。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...