我们启动了一个 ALTER TABLE,删除了一个索引并添加了另一个索引。尽管我们只期望表被锁定以进行写入,但读取开始排队,因此我们终止了 ALTER 进程。但是当 KILL 完成时,旧索引消失了,新索引出现在原来的位置,其基数比预期低得多。
现在在表上搜索似乎更快了,所以看起来 ALTER 进展顺利,但我们不确定。我们的 KILL 是否有可能使索引处于部分构建阶段?
最佳答案
如果索引存在,您可以认为它是完整的。
您可以使用SHOW CREATE TABLE
或SHOW INDEXES
来查看表上的索引。
正如评论中所指出的,SHOW INDEXES
列出的基数只是一个估计。
您可以尝试的一个测试是运行 SHOW INDEXES
,然后运行 ANALYZE TABLE
,然后再次运行 SHOW INDEXES
并查看估计值如何基数值发生变化。
关于mysql - 被终止的 ALTER TABLE 语句是否可以保留部分构建的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5432092/