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

SQL:如果我的最大值是255,使用tinyint而不是Integer是否有效?,sql,sql-server,integer,sqldatatypes,tinyint,Sql,Sql Server,Integer,Sqldatatypes,Tinyint,假设我想保存datagrid行的计数,因为每行的时间为1小时,所以最多可以是24行 要在数据库中保存行索引,一个tinyint字段就足够了。但在我的脑海里,我还记得数据库是针对整数优化的 那么使用tinyint值得吗?tinyint 空间越小越好。Tinyint是一个整数,它比INT快,因为Tinyint占用的字节(1字节)比INT数据类型(4字节)少 参考: 使用更窄的表,数据库将在单个IO页面中容纳更多的记录,因此需要更少的硬盘读取 经验法则是始终使用需要最小存储大小的数据类型 一般来说

假设我想保存datagrid行的计数,因为每行的时间为1小时,所以最多可以是24行

要在数据库中保存行索引,一个tinyint字段就足够了。但在我的脑海里,我还记得数据库是针对整数优化的

那么使用tinyint值得吗?

tinyint

空间越小越好。

Tinyint是一个整数,它比INT快,因为Tinyint占用的字节(1字节)比INT数据类型(4字节)少

参考:


使用更窄的表,数据库将在单个IO页面中容纳更多的记录,因此需要更少的硬盘读取


经验法则是始终使用需要最小存储大小的数据类型

一般来说,空间越小越好,因为磁盘(或内存)上单个8k I/O页上可以容纳的行越多,搜索和/或检索数据所需的I/O就越少。。。这对于索引中使用的列尤其重要。但是,例如,如果您的机器是32位机器,并且运行32位操作系统,那么可以独立寻址的最小内存块是32位,因此,如果这是表架构中唯一小于32位的列,那么这并不重要,因为每一整行数据都必须在32位边界上开始和结束,因此,每行必须是32位宽的倍数

i、 如果你的桌子是

MyTable(ColA tinyint、ColB Int、ColC DateTime) 然后每行将占用16字节(128位),24位将被浪费

另一方面,如果您有4列可以是tinyint,那么请务必使用它,因为SQL server会将其中的4列放在磁盘上的一个32位存储位置(无论您以何种顺序声明它们)

同样的原则也适用于运行在64位OS/CPUbB上的64位SQL Server是的,假设数据类型可以存储所需的数据,则存储大小最小。也就是说,如果有时需要大于255的整数值,请不要使用tinyint。似乎很明显,但需要说明的是::-)