【问题标题】:Mysql medium int vs. int performanceMysql 中等 int 与 int 性能
【发布时间】:2011-02-22 16:14:25
【问题描述】:

我有一个简单的用户表,我猜我将拥有的最大用户数是 300,000。

目前我正在使用:

 CREATE TABLE users
 (
         id INT UNSIGNED AUTOINCREMENT PRIMARY KEY,
         ....

当然,我还有许多其他表,其中 users(id) 是外键。

我读到,由于 id 不会使用 INT 的全部最大值,因此最好使用: MEDIUMINT,它将提供更好的性能。

是真的吗?

(我在 Windows Server 2008 上使用 mysql)

【问题讨论】:

标签: mysql performance datatable


【解决方案1】:

不应该存在性能差异,您获得的唯一优势是表大小略小。无论如何,您不必关心仅 300,000 行。

【讨论】:

    【解决方案2】:

    这称为微优化,不是问题。
    尝试只根据真实经验而不是想象来问(首先是你自己)性能问题。 profiling 总是有助于区分彼此。

    至于“300k max”——在现实生活中,数字往往会意外增长。为什么要给自己挖坑?

    【讨论】:

      【解决方案3】:

      有时我会考虑在 300K 行上使用 MEDIUMINT。MEDIUMINT 为您提供了最多 16M 行(无符号)的足够空间。

      当您使用索引时,这不仅仅是关于“较小的表大小”.. 差异可能很大 在 27M 行表上。将 2 列从 INT 更改为 MEDIUMINT 为我节省了 1GB(索引 + 表数据),因此它从 2.5GB 变为 1.5GB。

      【讨论】:

        【解决方案4】:

        如果您关心速度微优化,请使用int

        磁盘读取访问将读取一个字节块,因此读取 4 个字节将与读取 3 个字节相同。

        但由于 3 字节整数不是 CPU 原生的,mediumint 需要转换才能使用(memcpy 转换为 4/8 字节整数)导致开销,而 4 字节整数是 CPU 原生的,可以可以直接使用。

        【讨论】:

          猜你喜欢
          • 2012-03-11
          • 2014-08-27
          • 2013-12-31
          • 1970-01-01
          • 2013-03-31
          • 1970-01-01
          • 2018-03-14
          • 2017-12-04
          • 1970-01-01
          相关资源
          最近更新 更多