更新相对较大的表(约 7000 万行)以用不同表的 id 替换外键列(由当前键间接链接)的推荐方法是什么?
假设我有三个表:
Person
Id long,
Group_id long --> foreign key to Group table
Group
Id long
Device_id long --> foreign key to Device table
Device
Id long
我想更新Person
表以具有表的直接外键Device
,即:
Person
Id long,
Device_Id long --> foreign key to Device table
Device
Id long
查询看起来像这样:
-- replace Group_id with Device_id
update p from Person p
inner join Group g
on g.Id = p.Group_id
set p.Group_id = g.Device_id
我将首先删除 FK 约束,然后重命名该列。
- 这行得通吗?
- 有没有更好的办法?
- 我可以加快速度吗?(当这个查询运行时,其他一切都将离线,服务器是 UPS 备份的,所以我想跳过任何事务更新)