1 億 2,000 万レコードの更新戦略: 効率的なアプローチ
1 億 2,000 万のレコードを含むテーブルを更新するのは、大変な作業になる場合があります。デフォルトの更新アプローチではリソースが枯渇し、長期間かかる可能性があります。この課題を克服するには、より効率的な方法として、SELECT ステートメントを使用して別のテーブルにデータを設定します。
セカンダリ テーブルにデータを設定する手順
クラスタード インデックスのないテーブルの場合同時 DML がない期間中は、次の手順を適用できます:
-
クローンBaseTable: SELECT ステートメントを使用して、dbo.BaseTable からのデータと -1 に設定された新しい INT 列を含む clone.BaseTable を作成します。
-
クローンを修正します:クローンテーブルにインデックスや制約などを再作成します。
-
スワップテーブル: ALTER SCHEMA ... TRANSFER を使用して、元のテーブルとクローン テーブルを交換します。
-
クリーンアップ: 古いテーブルを削除します。
テーブルの場合クラスター化インデックスやその他の複雑性がある場合、より詳細なプロセスは次のとおりです。必須:
単純でないシナリオの詳細なプロセス
-
BaseTable の再作成: クラスター化されたスキーマを使用して、元のテーブルのクローンを作成します。インデックス、ID 列、計算列、および新しい INT
-
制約の除外: トリガー、外部キー制約、非クラスター化インデックス、チェック制約を省略します。
-
テスト挿入:クローンテーブルの検証のための小さな挿入操作
-
Truncate Clone: クローン テーブルをクリアします。
-
Bulk Insert: 一括ログまたはクローン テーブルへの一括挿入を実行します。簡易リカバリモード。
-
再作成制約: すべての非クラスター化制約、インデックス、トリガー、チェック制約を 1 つずつ再作成します。
-
スキーマ転送: クローン テーブルを dbo スキーマと元のテーブルに移動します。バックアップ スキーマにコピーします。
-
True-Up操作: 該当する場合は、必要な調整操作を実行します。
結論
この選択と入力のアプローチを利用すると、次のようになります。大きなテーブルを効率的に更新できます。この方法はテーブルの更新に必要な時間を大幅に短縮できるため、多数のレコードを持つテーブルにとって実行可能なソリューションになります。
以上が1 億 2,000 万件のレコードを含むテーブルを効率的に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。