在完成之前杀死ALTER TABLE或DROP INDEX命令

时间:2013-08-08 05:28:30

标签: mysql

我刚刚运行了一个查询来删除一个索引,而且我花了很长时间才终止了查询。我现在很好奇,它是否部分删除了索引,还是索引不受影响?

我第一次使用ALTER TABLE,第二次使用DROP INDEX来删除索引,但最终杀死了两个查询。我对MySQL方法的理解是它复制到临时表,应用临时表上的更改(删除索引),删除原始文件并重命名临时表。它是否正确?这对于ALTER TABLEDROP INDEX命令都是正确的,还是仅适用于其中一个命令?

2 个答案:

答案 0 :(得分:1)

是的,如果使用默认设置,你是对的。

可以配置数据库,使其不会生成(使用)临时表。

您还可以查看结果,以便仔细检查

答案 1 :(得分:1)

这会回滚一切。在ACID投诉数据库中没有完成一半的交易。这是一个全有或全无的情况。

现在需要记住一些事情,特别是就InnoDB而言,索引不会与表一起存储。它是磁盘上的一个单独的B-Tree结构,带有指向表中数据的指针。因此MySQL永远不需要从表中删除索引。它只需要破坏索引结构。