为什么我们通常在删除主键之前创建索引?

时间:2013-08-10 18:54:45

标签: mysql indexing primary-key alter-table

我认为以下是标准编码“模式”,当我们需要更改表的主键以通过索引更好地提供查询时:

ALTER TABLE employees   
  ADD UNIQUE INDEX tmp (employee_id, subsidiary_id);  

ALTER TABLE employees  
 DROP PRIMARY KEY;  

ALTER TABLE employees  
  ADD PRIMARY KEY (subsidiary_id, employee_id);  

我的理解是,在删除主键之前创建了<{1}}索引,以便于使用当前主键进行查询而不会失去性能。
但我不明白这一点 当我们执行tmp(我指的是ALTER TABLE删除主键时)表将被锁定,直到操作完成为止?
所以无论如何都无法运行查询。那么为什么要首先创建ALTER TABLE呢?

1 个答案:

答案 0 :(得分:1)

我没见过这种模式。但是,我希望它的原因略有不同。与确保密钥对在整个事务集中保持唯一相比,其目的不是“促进”查询。

换句话说,在删除主键和创建新密钥之间,有一个简短的机会窗口让某人插入一对重复的密钥。然后第二个操作将失败。通过首先创建唯一索引,可以防止这种情况发生。

如果您知道在修改表时没有其他用户/查询使用系统(比如您处于单用户模式),则无需创建其他索引。