質問: 私はSQL Serverの初心者で、次のジレンマを持っています。 私は同じ構造の2つのテーブルを持っています。それを`runningTbl`と`finalTbl`と`runningTbl`で`finalTbl` 。 `runningTbl`は、15分ごとに`runningTbl`万行が含まれます。 `runningTbl`データのクリーンアップを行った後、すべてのレコードを`finalTbl`に移動し`finalTbl` 。 `finalTbl`現在、約3,800万行があります。 上記のプロセスは15〜20分ごとに繰り返す必要があります。 問題は、データの移動ということである`runningTbl`に`finalTbl`時々道20分以上かかっています。.. 最初はテーブルが小さいときは、コピーするのに10秒から2分かかりました。 今はちょうど時間がかかります。 これを手助けできる人は誰ですか? SQLクエリをフォローする ありがとう
回答: 初心者のために:私が長年に渡って学んだことの1つは、MSSQLはあらゆる種類の操作を最適化するのには大変な仕事ですが、関与するすべてのテーブルの統計に大きく依存しています。したがって、実際の挿入を実行する前に、 "UPDATE STATISTICS processed_logs"& "UPDATE STATISTICS unprocessed_logs"を実行することをお勧めします。大きなテーブルでさえ、これらのことはそれほど長くはかからない。それとは別に、上記のクエリに基づいて、多くはターゲットテーブルのインデックスに依存します。私はターゲットテーブルが(少なくとも)UnixTime上のクラスタ化インデックス(またはPRIMARY KEY)を持っていると仮定しています。もし既存のレコードの間にますます多くのデータを詰め込むと、大きな断片化が発生します。この問題を回避するには、ターゲット表のデフラグをオンラインで行うことはできますが、時間がかかりますが、データが常に表の末尾に追加されるように、クラスタ化索引(またはPK)を作成します。より良いアプローチであること。まあ、少なくとも私の意見では。