sql >> データベース >  >> RDS >> Sqlserver

SQL Server での非常に大きなテーブルの UPDATE または MERGE

    実際、そのようなクエリの一般的な推奨事項を見つけました。SQL Merge または Update を使用するアイデアは非常に賢いものですが、多くのレコードを更新する必要がある場合 (つまり、75M) は失敗します。 ) 大きくて幅の広いテーブル (例:240M) )。

    以下のクエリのクエリ プランを見ると、TABLE SCAN と言えます。 TABLE1 と最後の MERGE の 時間の 90% を占めています。

    MERGE TABLE1 as Target  
    USING UTABLE as source  
    ON Target.record_id = source.record_id   
    WHEN MATCHED AND (condition) THEN   
        UPDATE SET Target.columns=source.columns
    

    したがって、MERGE を使用するには、次のことを行う必要があります:

    <オール>
  1. 更新が必要な行数を減らし、この情報を SQL Server に正しく渡す。これは UTABLE にすることで実現できます より小さいか、追加の condition を指定する マージする部分を狭めます。
  2. マージする部分がメモリに収まるようにしてください。そうしないと、クエリの実行速度が遅くなります。 TABLE1 の作成 実際のクエリ時間が 11 時間から 40 分に短縮されました。
  3. マークが述べたように、 UPDATE を使用できます 構文と使用 WHERE マージされる部分を狭める節 - これは同じ結果をもたらします。また、TABLE1 のインデックス作成も避けてください これにより、MERGE 中にインデックスを再構築する追加の作業が発生するためです。



    1. phpformysqlの入力データを安全にエスケープする方法

    2. トップレベルの親MySQLを取得する

    3. Oracleを使用してトリガーを作成する際の問題

    4. MySQLIF条件