【发布时间】:2015-06-16 22:27:26
【问题描述】:
在 MySQL 中使用 InnoDB 存储引擎时,如果在创建表时未指定 PRIMARY KEY,则使用隐藏唯一索引作为聚集索引。由于数据字典上的互斥锁,我了解到这些隐藏索引可能会导致争用。
我的问题是 - 如果我向表中添加 PRIMARY KEY,隐藏的 PK 会发生什么?
【问题讨论】:
在 MySQL 中使用 InnoDB 存储引擎时,如果在创建表时未指定 PRIMARY KEY,则使用隐藏唯一索引作为聚集索引。由于数据字典上的互斥锁,我了解到这些隐藏索引可能会导致争用。
我的问题是 - 如果我向表中添加 PRIMARY KEY,隐藏的 PK 会发生什么?
【问题讨论】:
如果您将PRIMARY KEY 添加到表中,InnoDB 会将其用作集群索引。
如果 InnoDB 在非 NULLable 列上使用 UNIQUE INDEX 作为集群索引,则 UNIQUE INDEX 仍然存在,但它将成为二级索引(当您添加 PRIMARY KEY 时。)
如果 InnoDB 使用合成行 id 列上的隐藏索引作为集群索引,则该隐藏索引将被删除(当您添加 PRIMARY KEY 时)。
【讨论】:
jeremy cole innodb index 并阅读前几个链接。