sql >> Databasteknik >  >> RDS >> PostgreSQL

SQL-fråga med IN med en lista mycket långsam

Går väldigt ofta med i en VALUES klausul är mer effektiv:

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

Var uppmärksam på formatet på "listan". I values sats måste varje värde omges inom parentes. ('v1'), ('v2'), ... istället för ('v1', 'v2', ...)

Onlineexempel:http://rextester.com/UUWVG71217

Observera att om kolumnen du jämför värdena med verkligen är ett tal (t.ex. heltal), bör du inte ange värdena med enstaka citattecken, t.ex. values (1),(2),(3),...(2000)



  1. Hur man kör SQL Server 2017 &2019 samtidigt på en Mac

  2. MySQL hur man sammanfogar tabeller på två fält

  3. Hur använder man alfanumeriska fält med BETWEEN-satsen i Mysql?

  4. Hur man skapar länkad server MySQL