1

我都..

我一直使用 int(10) 来处理所有事情,但是几天前,我开始了一个新项目,并希望能做到 100% 优化;)

所以我想知道,有多少;

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

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

等等..

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

感谢您对此的任何回复!

-汤姆

4

2 回答 2

5

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

Integer Type    Max Value
TINYINT         255
SMALLINT        65535
MEDIUMINT       16777215
INT             4294967295
BIGINT          18446744073709551615
于 2012-04-09T20:13:13.763 回答
4

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

括号中的可选数字是显示宽度。它与整数范围内有多少唯一值或整数需要多少存储空间无关。 应用程序代码可以随意忽略有关显示宽度的提示。“显示宽度”是 SQL 的非标准扩展。

INTEGER(6) 和 INTEGER(2) 都需要 4 个字节来存储,并且都接受范围从 -2147483648 到 2147483647 的值

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

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

于 2012-04-11T13:05:52.407 回答