遅いものから速いものの大まかな順序:
- 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標準です。
この関連する質問を参照してください: