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

更新クエリのパフォーマンスの問題

    遅いものから速いものの大まかな順序:

    • 200個の個別のクエリ。それぞれが独自のトランザクションに含まれます
    • 200個の個別のクエリをすべて1つのトランザクションで
    • WHERE ... IN (...)を使用した1つの大きなクエリ またはWHERE EXISTS (SELECT ...)
    • INNER JOINを使用した1つの大きなクエリ VALUESを介して 条項
    • (値のリストが非常に大きい場合にのみ高速):COPY 一時テーブルへの値リスト、インデックス付け、およびJOIN 一時テーブルにあります。

    何百もの値を使用している場合は、VALUESを介して参加することをお勧めします 句。何千もの値の場合、COPY 一時テーブルにインデックスを付けてインデックスを付け、結合します。

    値句で結合する例。このINを考えると クエリ:

    SELECT *
    FROM mytable
    WHERE somevalue IN (1, 2, 3, 4, 5);
    

    VALUESと同等 は:

    SELECT *
    FROM mytable
    INNER JOIN (
      VALUES (1), (2), (3), (4), (5)
    ) vals(v)
    ON (somevalue = v);
    

    ただし、VALUESを使用することに注意してください この方法はPostgreSQLの拡張機能であり、IN 、または一時テーブルの使用はSQL標準です。

    この関連する質問を参照してください:



    1. PESSIMESTICLOCKがMySQLにアクセスするSpringDataで機能しない

    2. ピボットテーブルPHP/MySQL

    3. ORDER BY、LIMIT、および複数のテーブルを使用したUPDATE構文

    4. mysqlは、検索と挿入時に整数を奇妙な数に切り捨てます