En orden aproximado de más lento a más rápido:
- 200 consultas individuales, cada una en su propia transacción
- 200 consultas individuales, todo en una sola transacción
- 1 gran consulta con
WHERE ... IN (...)oWHERE EXISTS (SELECT ...) - 1 gran consulta con
INNER JOINsobre unVALUEScláusula - (solo más rápido para listas de valores muy grandes):
COPYlista de valores a una tabla temporal, indexarla yJOINen la tabla temporal.
Si está utilizando cientos de valores, realmente sugiero unirse a través de un VALUES cláusula. Para muchos miles de valores, COPY a una tabla temporal e indexarla y luego unirse a ella.
Un ejemplo de unión en una cláusula de valores. Dado esto IN consulta:
SELECT *
FROM mytable
WHERE somevalue IN (1, 2, 3, 4, 5);
el equivalente con VALUES es:
SELECT *
FROM mytable
INNER JOIN (
VALUES (1), (2), (3), (4), (5)
) vals(v)
ON (somevalue = v);
Tenga en cuenta, sin embargo, que el uso de VALUES de esta manera es una extensión de PostgreSQL, mientras que IN , o usar una tabla temporal, es el estándar de SQL.
Consulte esta pregunta relacionada: