我认为以下是标准编码“模式”,当我们需要更改表的主键以通过索引更好地提供查询时:
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
呢?
答案 0 :(得分:1)
我没见过这种模式。但是,我希望它的原因略有不同。与确保密钥对在整个事务集中保持唯一相比,其目的不是“促进”查询。
换句话说,在删除主键和创建新密钥之间,有一个简短的机会窗口让某人插入一对重复的密钥。然后第二个操作将失败。通过首先创建唯一索引,可以防止这种情况发生。
如果您知道在修改表时没有其他用户/查询使用系统(比如您处于单用户模式),则无需创建其他索引。