Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

298
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!