MySQL 在添加新的复合索引时是不是会在表上获得锁?

Posted

技术标签:

【中文标题】MySQL 在添加新的复合索引时是不是会在表上获得锁?【英文标题】:Does MySQL obtains a lock on the table while adding a new composite index?MySQL 在添加新的复合索引时是否会在表上获得锁? 【发布时间】:2021-04-20 06:51:56 【问题描述】:

我有一张导致性能问题的生产表。我已经确定了一些可以添加以解决问题的快速索引。 mysql 在添加新索引时是否会获得表上的锁?是否取决于索引的性质(唯一性、复合性等)?

请注意,我没有任何特殊需要添加新列,因此不会运行任何 ALTER 命令。

【问题讨论】:

什么版本的 MySQL? 这很重要。 MYSql 版本:5.7 【参考方案1】:

UNIQUE 索引必须检查唯一性。

PRIMARY KEY 的任何更改都需要重建索引。 (对于 InnoDB)

新版本的 MySQL 可以添加索引而影响很小。

复合无所谓。

添加“新列”是一个不同的问题。这也“取决于”。如果您没有“after”子句,新版本可以“立即”执行此操作。

【讨论】:

我担心的是锁。 MySQL 在添加索引时是否会在表上获得任何类型的锁(读/写)?

以上是关于MySQL 在添加新的复合索引时是不是会在表上获得锁?的主要内容,如果未能解决你的问题,请参考以下文章

MariaDB/MySQL 复合唯一索引无效

如何在表上创建复合主键 [重复]

mysql在具有1亿行的表上创建索引

如果 ID 列是主键,我是不是需要在 mySQL 表上添加索引?

在表或视图上设置索引?

mysql 索引作用范围