mysql - 被终止的 ALTER TABLE 语句是否可以保留部分构建的索引?

标签 mysql innodb

我们启动了一个 ALTER TABLE,删除了一个索引并添加了另一个索引。尽管我们只期望表被锁定以进行写入,但读取开始排队,因此我们终止了 ALTER 进程。但是当 KILL 完成时,旧索引消失了,新索引出现在原来的位置,其基数比预期低得多。

现在在表上搜索似乎更快了,所以看起来 ALTER 进展顺利,但我们不确定。我们的 KILL 是否有可能使索引处于部分构建阶段?

最佳答案

如果索引存在,您可以认为它是完整的。

您可以使用SHOW CREATE TABLESHOW INDEXES来查看表上的索引。

正如评论中所指出的,SHOW INDEXES 列出的基数只是一个估计。

您可以尝试的一个测试是运行 SHOW INDEXES,然后运行 ​​ANALYZE TABLE,然后再次运行 SHOW INDEXES 并查看估计值如何基数值发生变化。

关于mysql - 被终止的 ALTER TABLE 语句是否可以保留部分构建的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5432092/

相关文章:

MySQL 查询非常慢。索引列上的 Count(*)

MySQL 使用主键删除重复行

mysql - MariaDB 启动时出错,不断重新启动

php - 拆分分隔文本并与另一个字段配对

MySQL 查询优化 - distinct、order by 和 limit

mysql - VarChar 的行大小不超过

mysql - 如何删除 InnoDB 数据库中带有约束的 MySQL 表前缀

MySQL/MariaDB 在 PRIMARY KEY 上更新缓慢

mysql - 如何让 Navicat mySQL (Non-Commercial) 表默认为 InnoDB 引擎?

mysql - 对 my.cnf 的更改不生效(Ubuntu 16.04、mysql 5.6)