いう2つのテーブルがあります。*から見て更新する必要があります。これを行うには以下のsqlを実行しますが、完了するまでに時間がかかります。*には6Mレコードがあります。*には5000レコードがあります。すれば最適化できますか。返信ありがとうございます。Answer2潜在的に600万レコードを更新しています、これはいずれにしてもひどく速くなることはないでしょう。実行計画を調べて、それが索引を使用しているかどうかを確認してください。これをバッチで実行することもできます。一般的に、大量のレコードを更新する場合は高速です。データベースへの負荷がほとんどない時間帯に更新を実行すると、潜在的なロックの問題が軽減されます。暗黙的な変換をする必要がないように、2つのテーブル間でデータ型が同じであることを確認してください。更新しているテーブルを見てください。トリガーの作成方法によっては、これは多くのレコードの更新を著しく遅くする可能性があります(明るすぎない人がセットベースのコードを書く代わりにカーソルにカーソルまたはループを置くことを決めた場合)。DATE_NOを設定します。d.DATEに日付Dを結合します。DATE_NOすでに一致したレコードを更新しても意味がありません。source1この大量のデータを使用すると、新しいテーブルを見たいときに、更新された値を含む結果セットを生成するSELECTクエリを作成するのが最善の方法です。'NewTableToUpdate')。'TableToUpdate’にそれぞれ名前を変更してから、元のテーブルにあるとおりにインデックスを作成します。私の経験では、これがこのような大きな変化を達成するための最も早い手段であることがわかりました。BYを追加して、クラスタードインデックスと同じ順序で新しいテーブルに挿入されるようにします。これにより、インデックス作成が大幅にスピードアップします。source0関連するフィールドにインデックスを(適切な順序で)設定できます。例:endtimekeyとendtime。これの多くに期待しないでください。他に確認できるのは、クエリ結果を制限するための制約が他にあるかどうかです。すべてのtabletoupdate.endtimeキーに対して正しいdate_noを返すビューを作成することもできます。これは本当に更新を加速するからです。あればそれはそれにインデックスを持っているかもしれません、もしそうであればスピード(またはその欠如)はインデックスも更新しながらデータの実際の更新もしているでしょう、解決策インデックスを落とし、インデックスを再適用する更新を実行します。あなたがこの更新をするときそれは失敗の場合にそれがロールバックできるようにすべての変更を記録するでしょう。このアップデートはかなり簡単に見えるので、バッチで適用することができます。TableToUpdateを更新します。DATEここで、TableToUpdateIdは1から100000の間です。少なくとも、各塊がどれくらいかかるかという考えを得るでしょう。1つの選択肢は、EndTime列にインデックスを付けることです。潜在的には、フルテーブルスキャンを実行する必要があります。本当の答えは、生成されているクエリプランを見ることです。ご覧のとおり、クエリの実行速度が遅くなる理由はいくつもあります。これらは確認するための簡単なものです。