丢弃索引查询很慢

时间:2015-02-04 18:52:13

标签: mysql performance indexing sql-drop

这是我试图执行的查询:

DROP INDEX id_index on table;

我过去能够快速删除索引,但是在我放弃它之前,这个查询运行了将近一个小时。什么可能导致这种缓慢的步伐?

1 个答案:

答案 0 :(得分:3)

SHOW CREATE TABLE - 如果它显示ENGINE = MyISAM,则DROP以这种方式执行:

  1. 将整个表数据复制到temp(由于大量I / O而缓慢)
  2. 重建所有剩余的索引(在某些情况下非常慢)
  3. 重命名以替换现有表格(总是快速)
  4. 这可能非常慢,具体取决于桌子的大小。这是因为所有的磁盘I / O.

    如果它说ENGINE = InnoDB,事情可能会更好。但是,你是否正在关注PRIMARY KEY仍然很重要。并且可能KEY是否涉及FOREIGN KEY约束。我假设old_alter_table设置为OFF。

    http://dev.mysql.com/doc/refman/5.6/en/alter-table.html 有很多细节。您需要说的是ALGORITHM = INPLACE。您可能有ALGORITHM = DEFAULT,我在文档中没有看到默认值是什么。

    ALGORITHM = COPY就像我上面提到的MyISAM一样。

    ALGORITHM = INPLACE应该花很少的时间,无论表/索引大小如何。

    (请务必查看ALTER的详细信息,了解您运行的版本。最近的主要版本有一些重大更改。)

相关问题