【问题标题】:When is the btree created when adding an index to a MySQL 5.5 table?向 MySQL 5.5 表添加索引时何时创建 btree?
【发布时间】:2016-03-22 08:26:12
【问题描述】:

我在 MySQL 5.5 中有一个相当大的表,约 2 亿行,我想为该表中的一列添加索引(btree 类型)。该列是整数类型,包含广泛分布的整数。

我的问题是什么时候计算 btree?

当我执行简单的创建索引查询时:

ALTER TABLE bigtable ADD INDEX (column3);

它立即返回。 btree 的计算是在后台进行的吗?我无法想象 MySQL 在创建具有广泛分布的整数的约 200M 值的 btree 方面如此之快。

【问题讨论】:

    标签: mysql b-tree


    【解决方案1】:

    简短回答:

    长答案:查看 ALTER_TABLE 的 MySQL Documentation 会发现以下内容:

    在大多数情况下,ALTER TABLE 会制作原始表的临时副本。 MySQL 等待其他正在修改表的操作,然后继续。它将更改合并到副本中,删除原始表并重命名新表。当 ALTER TABLE 正在执行时,原始表可以被其他会话读取(除了很快提到的例外)。在 ALTER TABLE 操作开始之后开始的对表的更新和写入会停止,直到新表准备好,然后自动重定向到新表,而不会出现任何失败的更新。在新表的数据库目录中创建原始表的临时副本。对于将表重命名为不同数据库的 ALTER TABLE 操作,这可能与原始表的数据库目录不同。

    因此,当您创建索引时,会在表的临时副本上创建索引,然后在完成时将其导入以代替现在删除的原始表。

    【讨论】:

      猜你喜欢
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      相关资源
      最近更新 更多