0

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

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);  

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

4

1 回答 1

1

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

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

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

于 2013-08-10T20:06:34.613 回答