我刚刚运行了一个查询来删除一个索引,而且我花了很长时间才终止了查询。我现在很好奇,它是否部分删除了索引,还是索引不受影响?
我第一次使用ALTER TABLE
,第二次使用DROP INDEX
来删除索引,但最终杀死了两个查询。我对MySQL方法的理解是它复制到临时表,应用临时表上的更改(删除索引),删除原始文件并重命名临时表。它是否正确?这对于ALTER TABLE
和DROP INDEX
命令都是正确的,还是仅适用于其中一个命令?
答案 0 :(得分:1)
是的,如果使用默认设置,你是对的。
可以配置数据库,使其不会生成(使用)临时表。
您还可以查看结果,以便仔细检查
答案 1 :(得分:1)
这会回滚一切。在ACID投诉数据库中没有完成一半的交易。这是一个全有或全无的情况。
现在需要记住一些事情,特别是就InnoDB而言,索引不会与表一起存储。它是磁盘上的一个单独的B-Tree结构,带有指向表中数据的指针。因此MySQL永远不需要从表中删除索引。它只需要破坏索引结构。