sql >> Database >  >> RDS >> PostgreSQL

SQL-query met IN met een lijst erg traag

Heel vaak deelnemen aan een VALUES clausule is efficiënter:

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

Let op het formaat van de "lijst". In de values clausule, moet elke waarde tussen haakjes worden geplaatst. ('v1'), ('v2'), ... in plaats van ('v1', 'v2', ...)

Online voorbeeld:http://rextester.com/UUWVG71217

Houd er rekening mee dat als de kolom waarmee u de waarden vergelijkt echt een getal is (bijvoorbeeld een geheel getal), u niet specificeer de waarden met enkele aanhalingstekens, b.v. values (1),(2),(3),...(2000)



  1. Goed databasemodel voor een gebruikersfeedbacksysteem (een interessant geval)

  2. CSV-gegevens laden naar een PostgreSQL-tabel

  3. Taal wijzigen van systeem- en foutmeldingen in PostgreSQL

  4. Het resultaat van de tijdelijke tabel retourneren in de functie postgresql