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

Consulta SQL usando IN com uma lista muito lenta


Frequentemente juntando-se a um VALUES cláusula é mais eficiente:
SELECT count(*) 
FROM mytable 
  JOIN (
     values ('v1'), ('v2'), (...), ('v2000')
  ) as lookup(value) on lookup.value = mytable.some_column
WHERE NOT other_column = 'something'
AND another_column = 'something_else';

Preste atenção ao formato da "lista". Nos values cláusula, cada valor precisa ser colocado entre parênteses. ('v1'), ('v2'), ... em vez de ('v1', 'v2', ...)

Exemplo on-line:http://rextester.com/UUWVG71217

Observe que, se a coluna com a qual você compara os valores for realmente um número (por exemplo, inteiro), você não especifique os valores usando aspas simples, por exemplo values (1),(2),(3),...(2000)