Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

299
Visualizações
Diferencia entre ANY(ARRAY[..]) vs ANY(VALUES (), () ..) en PostgreSQL

Estoy tratando de entrenar la optimización de consultas en id. No estoy seguro de cuál debo usar. A continuación se muestra el plan de consulta que utiliza la explain y el costo es similar.

 1. explain (analyze, buffers) SELECT * FROM table1 WHERE id = ANY (ARRAY['00e289b0-1ac8-451f-957f-e00bc289148e'::uuid,...]); QUERY PLAN: Index Scan using table1_pkey on table1 (cost=0.42..641.44 rows=76 width=835) (actual time=0.258..2.603 rows=76 loops=1) Index Cond: (id = ANY ('{00e289b0-1ac8-451f-957f-e00bc289148e,...}'::uuid[])) Buffers: shared hit=231 read=73 Planning Time: 0.487 ms Execution Time: 2.715 ms) 2. explain (analyze, buffers) SELECT * FROM table1 WHERE id = ANY (VALUES ('00e289b0-1ac8-451f-957f-e00bc289148e'::uuid),...); QUERY PLAN: Nested Loop (cost=1.56..644.10 rows=76 width=835) (actual time=0.058..0.297 rows=76 loops=1) Buffers: shared hit=304 -> HashAggregate (cost=1.14..1.90 rows=76 width=16) (actual time=0.049..0.060 rows=76 loops=1) Group Key: "*VALUES*".column1 -> Values Scan on "*VALUES*" (cost=0.00..0.95 rows=76 width=16) (actual time=0.006..0.022 rows=76 loops=1) -> Index Scan using table1_pkey on table1 (cost=0.42..8.44 rows=1 width=835) (actual time=0.002..0.003 rows=1 loops=76) Index Cond: (id = "*VALUES*".column1) Buffers: shared hit=304 Planning Time: 0.437 ms Execution Time: 0.389 ms

Parece que VALUES () hace algo de hash y se une para mejorar el rendimiento, pero no estoy seguro.

NOTA: En mi caso de uso práctico, la id es uuid_generate_v4() ex d31cddc0-1771-4de8-ad41-e6c568b39a5d pero es posible que la columna no esté indexada como tal. Además, tengo una tabla con 5-10 million records . ¿Qué camino es para el mejor rendimiento de la consulta?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Ambas opciones parecen razonables. Sin embargo, sugeriría evitar convertir la columna en la que filtra. En su lugar, debe convertir los valores literales a uuid :

 SELECT * FROM table1 WHERE id = ANY (ARRAY['00e289b0-1ac8-451f-957f-e00bc289148e'::uuid, ...]);

Esto debería permitir que la base de datos aproveche un índice en la columna id .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda