澄清MySQL 5.6使用IN PLACE alter table添加/删除相同的索引

时间:2014-12-11 19:18:25

标签: mysql performance

来自文档:

  

包含DROP INDEX和ADD INDEX的ALTER TABLE语句   两个名称相同索引的子句都使用表副本,而不是快速   索引创建。

这对我来说有点不清楚。是在谈论指数的名称吗?有人可以提供一个MySQL查询表副本的查询示例吗?

1 个答案:

答案 0 :(得分:0)

事实上,这听起来像这条线:

  • 一个(一个,一个)ALTER TABLE语句
  • 包含(两者)DROP INDEX和ADD INDEX子句
  • 并且两个子句都命名相同的索引

并声明此类语句使用表副本,而不是快速索引创建。

这样的陈述将是:

ALTER TABLE MyTable
  DROP INDEX MyIndex
  ADD INDEX MyIndex(MyColumn);

文档并没有真正清楚这背后的原因,但我认为数据库首先想要创建一个索引然后删除另一个索引,所以这个语句本身可以更容易原子化。 (创建索引可能会失败。)如果索引名称本身也在存储中使用,那么首先创建然后删除的顺序会产生冲突。

毕竟,快速索引创建是一个相对较新的功能,因此它们可能会随着时间的推移而改进。