PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Requête SQL utilisant IN avec une liste très lente

Très souvent joint à un a VALUES clause est plus efficace :

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';

Faites attention au format de la "liste". Dans les values clause, chaque valeur doit être placée entre parenthèses. ('v1'), ('v2'), ... au lieu de ('v1', 'v2', ...)

Exemple en ligne :http://rextester.com/UUWVG71217

Notez que si la colonne à laquelle vous comparez les valeurs est vraiment un nombre (par exemple, un entier), vous ne devriez pas spécifiez les valeurs à l'aide de guillemets simples, par ex. values (1),(2),(3),...(2000)