データベース: SQL Server 2005
問題 : 10 億以上の行を持つ同じテーブル内の 1 つの列から別の列に値をコピーします。
test_table (int id, bigint bigid)
試したこと1:更新クエリ
update test_table set bigid = id
トランザクション ログがいっぱいになり、トランザクション ログ スペースが不足するためにロールバックします。
2を試しました-次の行の手順
set nocount on
set rowcount = 500000
while @rowcount > 0
begin
update test_table set bigid = id where bigid is null
set @rowcount = @@rowcount
set @rowupdated = @rowsupdated + @rowcount
end
print @rowsupdated
上記の手順は、進行するにつれて速度が低下し始めます。
試した 3 - 更新用のカーソルを作成します。
通常、SQL Server のドキュメントでは推奨されておらず、このアプローチは一度に 1 行ずつ更新されるため、時間がかかりすぎます。
ある列から別の列への値のコピーを高速化できるアプローチはありますか。基本的に私は、更新クエリが一度に 50 万行ずつ順番に 10 億行をリッピングできるようにする「魔法の」キーワードまたはロジックを探しています。
ヒント、ポインタは大歓迎です。