SQL:如果我的最大值为255,使用tinyint而不是整数是否有效?

12

假设我想保存datagrid行的计数,最多可以有24行,因为每行代表1小时。

为了在数据库中保存行索引,使用tinyint字段完全足够。但是,在我的脑海中,我稍微记得数据库优化了整数?!

所以,使用tinyint值得吗?

4个回答

11

通过使用较窄的表格,数据库可以将更多的记录存储在单个IO页面中,因此需要更少的硬盘读取。

经验法则是始终使用需要最少存储空间的数据类型。


3
+1 是的,假设数据类型能够存储所需数据,则使用最小的存储大小。例如,如果有时需要大于255的整数值,则不要使用tinyint。这似乎很明显,但还是需要说一下。 :-) - Bill Karwin

4
一般来说,占用空间越少越好,因为能够在单个8k I/O磁盘页面(或内存中)容纳更多的行,就需要更少的I/O来搜索和/或检索数据... 这对于在索引中使用的列尤其重要。然而,如果您的机器是32位机器,并且运行着32位操作系统,那么可以独立寻址的最小内存块是32位,因此如果这是表模式中唯一小于32位的列,则无关紧要,因为每个完整的数据行必须从32位边界开始和结束,因此每行必须是32位宽度的倍数。
例如,如果您的表是:
MyTable(ColA tinyint, ColB Int, ColC DateTime)
那么每行将占用16字节(128位),其中24位将被浪费。
另一方面,如果您有4个可能是tinyInts的列,则请务必使用它们,因为SQL Server将把它们四个放入一个32位存储位置上的磁盘(无论您以什么顺序声明它们)。
同样的原则适用于64位SQL Server运行在64位操作系统/CPU上。

3

2

tinyint

less space is good.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接