【发布时间】:2021-04-20 06:51:56
【问题描述】:
我有一张导致性能问题的生产表。我已经确定了一些可以添加以解决问题的快速索引。 MySQL 在添加新索引时是否会获得表上的锁?是否取决于索引的性质(唯一性、复合性等)?
请注意,我没有任何特殊需要添加新列,因此不会运行任何 ALTER 命令。
【问题讨论】:
-
什么版本的 MySQL? 这很重要。
-
MYSql 版本:5.7
我有一张导致性能问题的生产表。我已经确定了一些可以添加以解决问题的快速索引。 MySQL 在添加新索引时是否会获得表上的锁?是否取决于索引的性质(唯一性、复合性等)?
请注意,我没有任何特殊需要添加新列,因此不会运行任何 ALTER 命令。
【问题讨论】:
UNIQUE 索引必须检查唯一性。
对PRIMARY KEY 的任何更改都需要重建索引。 (对于 InnoDB)
新版本的 MySQL 可以添加索引而影响很小。
复合无所谓。
添加“新列”是一个不同的问题。这也“取决于”。如果您没有“after”子句,新版本可以“立即”执行此操作。
【讨论】: