外部キー列を別のテーブル(現在のキーによって間接的にリンクされている)のIDに置き換えるために、比較的大きなテーブル(〜7000万行)を更新するための推奨される方法は何ですか?
3つのテーブルがあるとしましょう。
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でバックアップされるため、トランザクションの更新はスキップします)