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 JOIN
sobre unVALUES
cláusula - (solo más rápido para listas de valores muy grandes):
COPY
lista de valores a una tabla temporal, indexarla yJOIN
en 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: