Kommentarer
- Om det verkligen finns 800 där klausuler tycker jag att du borde arbeta med din ansökan
Svar
Sättet att skriva den frågan är:
SELECT * FROM member_copy WHERE id IN (17579, 17580, 17582);
Den verkliga frågan är dock var kom listan över id
från? Om listan med id
s är resultatet av en annan databasfråga, bör du göra antingen ett underval eller en anslutning istället.
Kommentarer
- Fungerade perfekt. Det var inte från en databasfråga, någon gick faktiskt igenom och plockade ut varje nummer. Jag avundar dem inte.
Svar
Ett test med EXPLAIN ANALYZE VERBOSE
visar att formuläret med id IN (...)
i svaret på @ 200_success omvandlas internt till:
SELECT * FROM member_copy WHERE id = ANY ("{17579, 17580, 17582}");
.. som därför fungerar lite snabbare till att börja med (ingen konvertering behövs).
Formuläret i din fråga kommer också att fungera effektivt väldigt lik.
Med stora listor kommer att ta bort en array följt av en JOIN
i allmänhet snabbare :
SELECT m.* FROM unnest("{17579, 17580, 17582}"::int[]) id JOIN member_copy m USING (id);
Eftersom listan är is the result of another database query
blir det snabbast att kombinera båda i en fråga med en JOIN
.
Mer detaljerad förklaring:
Svar
För ett enda ID fungerade följande fråga för mig:
SELECT * FROM member_copy WHERE id IN ("17579");
Kommentarer
- Kan du förklara hur detta svarar på OP?