我在MySQL 5.5中有一个很大的表,大约200M行,我想在这个表中的一个列(btree类型)中添加一个索引。该列的类型为整数,并包含大量的整数分布。
我的问题是btree何时计算?
当我执行简单的创建索引查询时:
ALTER TABLE bigtable ADD INDEX (column3);
立即返回。 btree的计算是在后台发生的吗?我无法想象MySQL能够快速创建具有大量整数分布的~200M值的btree。
答案 0 :(得分:0)
简短回答:是。
长答案:查看ALTER_TABLE的MySQL Documentation会显示以下内容:
在大多数情况下,ALTER TABLE会生成原始表的临时副本。 MySQL等待修改表的其他操作,然后继续。它将更改合并到副本中,删除原始表,并重命名新表。在执行ALTER TABLE时,原始表可由其他会话读取(不久之后会注明)。对ALTER TABLE操作开始后开始的表的更新和写入将停止,直到新表准备就绪,然后自动重定向到新表而不会有任何失败的更新。原始表的临时副本在新表的数据库目录中创建。这可能与用于将表重命名为其他数据库的ALTER TABLE操作的原始表的数据库目录不同。
因此,在创建索引时,将在表的临时副本上创建索引,然后在完成时将其导入以替换现在删除的原始表。