Uzavřeno. Tato otázka je mimo téma . Momentálně nepřijímá odpovědi.
Komentáře
- Pokud existuje opravdu 800 klauzulí, myslím, že byste měli na své aplikaci pracovat
Odpověď
Způsob, jak tento dotaz napsat, je:
SELECT * FROM member_copy WHERE id IN (17579, 17580, 17582);
Skutečná otázka však je, kde pochází ten seznam id
s? Pokud je seznam id
s výsledkem jiného databázového dotazu, měli byste místo toho použít buď podmnožinu, nebo spojení.
Komentáře
- Fungovalo to perfektně. Nebylo to z databázového dotazu, někdo ve skutečnosti prošel a vybral každé číslo. Nezávidím jim.
Odpovědět
Test s EXPLAIN ANALYZE VERBOSE
vám ukáže, že formulář s id IN (...)
v odpovědi @ 200_success je interně transformován do:
SELECT * FROM member_copy WHERE id = ANY ("{17579, 17580, 17582}");
.. které tedy začínají o něco rychleji (není nutná žádná konverze).
Formulář v otázce bude také účinně fungovat velmi podobný.
U velkých seznamů bude rozbalení pole následované JOIN
obecně rychlejší :
SELECT m.* FROM unnest("{17579, 17580, 17582}"::int[]) id JOIN member_copy m USING (id);
Jelikož je seznam is the result of another database query
, bude nejrychlejší kombinovat oba v jednom dotaz s JOIN
.
Podrobnější vysvětlení:
Odpověď
U jednoho ID pro mě fungoval následující dotaz:
SELECT * FROM member_copy WHERE id IN ("17579");
Komentáře
- Mohli byste vysvětlit, jak to odpovídá OP?