Kommentarer
- Hvis det virkelig er 800 klausuler, synes jeg du bør jobbe med søknaden din
Svar
Måten å skrive spørringen på er:
SELECT * FROM member_copy WHERE id IN (17579, 17580, 17582);
Det virkelige spørsmålet er imidlertid hvor kom listen over id
fra? Hvis listen over id
s er resultatet av et annet databasespørsmål, bør du i stedet gjøre enten et undervalg eller en sammenkobling.
Kommentarer
- Fungerte perfekt. Det var ikke fra et databasespørsmål, noen gikk faktisk gjennom og plukket ut hvert nummer. Jeg misunner ikke dem.
Svar
En test med EXPLAIN ANALYZE VERBOSE
vil vise deg at skjemaet med id IN (...)
i svaret på @ 200_success blir forvandlet internt til:
SELECT * FROM member_copy WHERE id = ANY ("{17579, 17580, 17582}");
.. som derfor fungerer litt raskere til å begynne med (ingen konvertering er nødvendig).
Også skjemaet i spørsmålet ditt vil effektivt utføre veldig lik.
Med store lister vil fjerne et array , etterfulgt av en JOIN
vil generelt være raskere :
SELECT m.* FROM unnest("{17579, 17580, 17582}"::int[]) id JOIN member_copy m USING (id);
Siden listen er is the result of another database query
, vil det være raskest å kombinere begge i one forespørsel med JOIN
.
Mer detaljert forklaring:
Svar
For en enkelt id fungerte følgende spørsmål for meg:
SELECT * FROM member_copy WHERE id IN ("17579");
Kommentarer
- Kan du forklare hvordan dette svarer på OP?