smallint总是有用吗?

时间:2011-02-25 19:10:41

标签: database

你认为今天, smallint 数据库类型仍然有用,或者它就像32/64位CPU上的短(使用 int 更好)

5 个答案:

答案 0 :(得分:1)

如果你不需要存储smallint范围之外的数字,那么使用int只是不必要地占用空间(4个字节vs 2个字节用于smallint)。经验法则,使用最适合其将包含的数据范围的数据类型。同样,在SQL Server世界中,总是使用VARCHAR(MAX)代替例如,这是一个好主意。 VARCHAR(100)?否。

答案 1 :(得分:1)

我认为这完全取决于RDBMS和处理器架构的底层实现。取决于处理器的特定体系结构,可以不同地处理不同的基元类型并且取决于该实现(处理器包含用于处理具有少量时钟周期的特定情况的功能单元)。任何特定“类型”的位宽由proc体系结构确定,尽管总线宽度为32位(或64),因此在数据类型中不需要仅使用32位或其倍数。根据我的理解,操作2字节类型将需要更多的处理时间,因为它需要“屏蔽结果”,但您将节省内存(优化可能需要减少内存使用或CPU使用或磁盘访问取决于你的瓶颈,我得到的内存是如此便宜,在那里牺牲成本几乎总是更好,但重点是)。因此,对于大量数据(如四十亿行)的情况,较小的数据类型可能仍然是一件好事,在DB对记录进行大量处理但没有空间限制问题的情况下使用适合数据和总线宽度的类型可能会更好。

答案 2 :(得分:0)

我认为从性能的角度来看,它不会产生太大的影响,但是除非你绝对可以保证smallint对于你的数据永远不会太小,否则请使用int:空间很便宜,而现场数据溢出错误不是。

答案 3 :(得分:0)

除非space / rowsize / etc.是一个重要的考虑因素,我永远不会使用小于32位int的整数类型。您几乎可以保证在某个地方出现类型转换/溢出/下溢问题。此外,系统针对32位操作进行了相当高的优化(无论如何,您的16位或8位整数都可能在32位寄存器中处理)。

同时,除非我真的需要,否则我可能不会使用64位整数。

答案 4 :(得分:0)

让数据库实现担心它。

注意/暗示将在该字段中存储哪种数据总是好的,它允许SQL守护进程在尝试为您做到最佳时考虑到这一点。