我可以用int,tinyint,mediumint等保存什么

时间:2012-04-09 14:16:41

标签: mysql database-design integer

我全都..

我总是使用int(10)来做所有事情,但几天前,我开始了一个新项目,并且希望这样做100%优化;)

所以我想知道,有多少;

user_id => int(6)与mediumint(8)或类似的将可以创建/添加

group_id => tinyint(1)vs tinyint(4)或类似的可以创建/添加

依旧......

我知道(X)是字段的宽度,但是,我不太明白可以使用example创建的实际用户/帖子/消息++的数量; mediumint(8)表示id,而不是int(10)。

感谢您对此有任何回复!!

-Tom

2 个答案:

答案 0 :(得分:5)

数据库ID通常始终为正(0->∞),因此最大值为:

Integer Type    Max Value
TINYINT         255
SMALLINT        65535
MEDIUMINT       16777215
INT             4294967295
BIGINT          18446744073709551615

答案 1 :(得分:4)

  

我知道(X)是字段的宽度

parens中的可选数字是 display 宽度。它与整数范围内有多少唯一值或整数需要多少存储空间无关。 Application code is free to ignore your hint关于显示宽度。 “显示宽度”是SQL的非标准扩展。

INTEGER(6)和INTEGER(2)都需要4个字节来存储,并且都接受values ranging from -2147483648 to 2147483647

所有中等整数需要3个字节来存储,并接受-8388608到8388607之间的值。

假设一个中等int足够大(约1600万个唯一值)来识别您的完整值域,您可能会在4字节整数上每行节省1个字节。 (潜在,因为某些平台需要填充到下一个字边界。对于32位系统,这将是4个字节,因此不会节省实际空间。我不知道MySQL是否这样做。)对于1000万行,您可以节省10兆字节(加上索引中的一些空间节省) - 这些日子不是很多。较窄的表通常比较宽的表更快,但我认为你不会注意到这里的差异。