何时在向MySQL 5.5表添加索引时创建了btree?

时间:2015-12-16 09:15:38

标签: mysql b-tree

我在MySQL 5.5中有一个很大的表,大约200M行,我想在这个表中的一个列(btree类型)中添加一个索引。该列的类型为整数,并包含大量的整数分布。

我的问题是btree何时计算?

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

ALTER TABLE bigtable ADD INDEX (column3);

立即返回。 btree的计算是在后台发生的吗?我无法想象MySQL能够快速创建具有大量整数分布的~200M值的btree。

1 个答案:

答案 0 :(得分:0)

简短回答:

长答案:查看ALTER_TABLE的MySQL Documentation会显示以下内容:

  

在大多数情况下,ALTER TABLE会生成原始表的临时副本。 MySQL等待修改表的其他操作,然后继续。它将更改合并到副本中,删除原始表,并重命名新表。在执行ALTER TABLE时,原始表可由其他会话读取(不久之后会注明)。对ALTER TABLE操作开始后开始的表的更新和写入将停止,直到新表准备就绪,然后自动重定向到新表而不会有任何失败的更新。原始表的临时副本在新表的数据库目录中创建。这可能与用于将表重命名为其他数据库的ALTER TABLE操作的原始表的数据库目录不同。

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