【问题标题】:what can I save with int,tinyint,mediumint and so on我可以用 int、tinyint、mediumint 等保存什么
【发布时间】:2012-04-21 21:43:23
【问题描述】:

我都..

我一直都使用 int(10),但是几天前,我开始了一个新项目,并希望做到这一点 100% 优化 ;)

所以我想知道,有多少;

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

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

等等..

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

感谢您对此的任何回复!

-汤姆

【问题讨论】:

  • Okei.. 所以如果我理解正确.. 对于我的示例场景;对 user.id 使用 Int、mediumint 与可以创建多少用户无关?就像说; mediumint(8) 能拯救800万用户吗?有什么实际的例子吗?
  • @Catcall:你真的认为 OP 计划在他的用户 ID 字段中使用负值吗?我不。所以,假设他只会使用正值(这是最常见的做法),那么使用INT UNSIGNED 确实有效地加倍您可以使用的唯一值的数量。谁在乎其他 DBM 支持什么?这个问题被标记为 MySQL。关键是,如果您只使用正值并且使用INT UNSIGNED 而不是INT,那么您可以使用的值数量会翻倍。是否需要进一步论证?

标签: mysql database-design integer


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    括号中的可选数字是显示宽度。它与整数范围内有多少唯一值或整数需要多少存储空间无关。 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 兆字节(加上索引中的一些空间节省)——这些天不是很多。较窄的表通常比较宽的表更快,但我认为您不会注意到这里的区别。

    【讨论】:

    • 感谢您的回答;)后续跟进。如果我在 mysql 5 中对 User.ID 使用 MEDIUMINT(8) UNSIGNED,可能有多少个唯一用户 ID?我只需要知道我现在是否理解这一点;)哦,还有 DISPLAY 宽度,我以前从其他地方得到的,所以单词选择很差!
    • 使用 MEDIUMINT 获得的不同积分数与使用 UNSIGNED MEDIUMINT 获得的不同整数完全相同:16,777,215。唯一的区别是端点。 (在第一种情况下,-8,388,608 到 8,388,607。在第二种情况下,0 到 16,777,215。)因此,您可以使用 MEDIUMINT 获得的唯一 ID 号的最大数量为 16,777,215。 (在实践中,你得到的会比这少一些。)
    • Okei.. 我就是这么理解的.. 我想 ;) 感谢您的宝贵时间!!!太棒了!
    • 16,777,216。 Fencepost error.
    猜你喜欢
    • 2011-02-28
    • 2012-07-26
    • 1970-01-01
    • 2016-04-21
    • 2018-05-28
    • 2013-05-23
    • 2010-12-03
    • 1970-01-01
    • 2020-05-30
    相关资源
    最近更新 更多