Opmerkingen
- Als er echt 800 Where-clausules zijn, denk ik dat je aan je applicatie moet werken
Antwoord
De manier om die vraag te schrijven is:
SELECT * FROM member_copy WHERE id IN (17579, 17580, 17582);
De echte vraag is echter, waar komt die lijst met id
s vandaan? Als de lijst met id
s het resultaat is van een andere databasequery, dan zou je in plaats daarvan een subselectie of een join moeten uitvoeren.
Reacties
- Werkte perfect. Het was niet van een database-query, iemand ging er echt doorheen en koos elk nummer uit. Ik benijd ze niet.
Antwoord
Een test met EXPLAIN ANALYZE VERBOSE
laat zien dat het formulier met id IN (...)
in het antwoord van @ 200_success intern wordt omgezet in:
SELECT * FROM member_copy WHERE id = ANY ("{17579, 17580, 17582}");
.. die daarom in het begin iets sneller presteert (geen conversie nodig).
Ook zal het formulier in uw vraag effectief presteren zeer vergelijkbaar.
Met grote lijsten zal een array ongedaan maken , gevolgd door een JOIN
over het algemeen sneller zijn :
SELECT m.* FROM unnest("{17579, 17580, 17582}"::int[]) id JOIN member_copy m USING (id);
Aangezien de lijst is the result of another database query
is, is het het snelst om beide te combineren in één zoekopdracht met een JOIN
.
Meer gedetailleerde uitleg:
Answer
Voor een enkele id werkte de volgende vraag voor mij:
SELECT * FROM member_copy WHERE id IN ("17579");
Reacties
- Kunt u uitleggen hoe dit het OP beantwoordt?