PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Problema de desempenho na consulta de atualização


Em ordem aproximada de mais lento para mais rápido:
  • 200 consultas individuais, cada uma em sua própria transação
  • 200 consultas individuais, tudo em uma transação
  • 1 grande consulta com WHERE ... IN (...) ou WHERE EXISTS (SELECT ...)
  • 1 consulta grande com um INNER JOIN sobre um VALUES cláusula
  • (apenas mais rápido para listas de valores muito grandes):COPY lista de valores para uma tabela temporária, indexe-a e JOIN na mesa temporária.

Se você estiver usando centenas de valores, eu realmente sugiro juntar um VALUES cláusula. Para muitos milhares de valores, COPY para uma tabela temporária e indexe-a e, em seguida, junte-se a ela.

Um exemplo de junção em uma cláusula de valores. Dado este IN consulta:
SELECT *
FROM mytable
WHERE somevalue IN (1, 2, 3, 4, 5);

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

Observe, no entanto, que usar VALUES desta forma é uma extensão do PostgreSQL, enquanto IN , ou usando uma tabela temporária, é o padrão SQL.

Veja esta pergunta relacionada: