> 文档中心 > SQL Server 数据库优化顾问 -2.列数据类型 numeric 和 int 对比

SQL Server 数据库优化顾问 -2.列数据类型 numeric 和 int 对比


一般我们在定义表的时候,列定义越具体越好。然而,昨天我遇到了一个案例,更好的定义列类型但实际上增加了存储的使用,并没有明显的好处。

整数类型(int) - 使用 Numeric vs Int

在我处理数据库时,我遇到了一个奇怪的现象,多个列定义为numeric(7,0)、numeric(9,0)等等。似乎有人试图为数据库提供针对多个不同数据段的最具体定义。由于从未遇到过这种特殊的做法,我立即开始寻找原因。它小一些吗?更快?较好的?

存储

使用一个非常具体、定义良好的数字实际上消耗了我们的存储空间,而不是减少了存储空间。精度值为1到9的数字(或十进制)需要5个字节,精度值为10到19的数字(或十进制)需要9个字节。将其与多种int进行比较:

<

Digits(十进制数字大小) Int 的衍生类型 Int Bytes(占用字节) Numeric(*,0) Bytes(占用字节) Difference(差值)
1 - 2 tinyint 1 5 4 bytes
3 - 4 smallint 2 5 3 bytes
5 - 9 int 4 5 1 byte