私は何百万ものレコードを含むテーブルを持っています。多くのデータを持つSQL変更列データ型
私は(10進数へのお金)別の列のデータ型のものがALTERステートメントを実行する時間の多くを取っている着目
を変更しています。おそらく、データがたくさんあるという事実のためです。
このシナリオのパフォーマンスを向上させる方法はありますか?
私は何百万ものレコードを含むテーブルを持っています。多くのデータを持つSQL変更列データ型
私は(10進数へのお金)別の列のデータ型のものがALTERステートメントを実行する時間の多くを取っている着目
を変更しています。おそらく、データがたくさんあるという事実のためです。
このシナリオのパフォーマンスを向上させる方法はありますか?
行のすべての何百万人が別のオプション1つのトランザクションで同時に変更
に持っているが、新しいテーブルを作成するバッチで挿入し、古いテーブルを削除し、新しいテーブルの名前を変更することです。 しかし、それはこのように長くかかる傾向があります。
新しい列の種類の一時表を作成し、元の表のデータを一時表にコピーし、元の表を削除してから、名前を変更します。
CREATE TABLE dbo.tmp_MyTable
(ID Integer, Name varchar (100), MyChangedField decimal (8,2))
INSERT INTO dbo.tmp_MyTable SELECT * FROM dbo.MyTable
DROP TABLE dbo.MyTable
EXECUTE sp_rename N'dbo.tmp_MyTable', N'MyTable', 'OBJECT'
これは非常に単純な例です。元のテーブルにインデックス、キー、および/またはデフォルト値がある場合は、そのテーブルも同様に処理する必要があります。
SQL Server Management Studioのテーブルデザイナで変更を加え、変更スクリプトを生成して、実行する必要があることをすべて表示するのが簡単です。
新しい小数点の列をテーブルに追加し、CAST()を使用して複数のバッチでmoney列からデータを取り込み、すべてが完了したときにmoney列を削除すると、時間がかかりますか?
私は個々の書き込みのサイズを最小限に抑えるためにデータのバッチシフトを行います。もちろん、まだ1つのトランザクションであれば、メリットはありません。 – gbn
この場合、INSERT文よりもロギングが少ないため、より性能の高いSELECT INTO文を使用する必要があります。 – Serguei