Megjegyzések
- Ha valóban vannak 800 záradékok, akkor szerintem dolgozzon az alkalmazásán.
Válasz
A lekérdezés megírásának módja a következő:
SELECT * FROM member_copy WHERE id IN (17579, 17580, 17582);
Az igazi kérdés azonban az, hogy hol a id
ek listája származott? Ha a id
ek listája egy másik adatbázis-lekérdezés eredménye, akkor vagy alszelektálást, vagy csatlakozást kell végeznie.
Megjegyzések
- Tökéletesen működött. Nem adatbázis lekérdezésből származott, valaki valóban átment és minden számot kiválasztott. Nem irigylem őket.
Válasz
Teszt a EXPLAIN ANALYZE VERBOSE
megmutatja, hogy a (z) id IN (...)
nevű űrlap a @ 200_success válaszban belső módon alakul át:
SELECT * FROM member_copy WHERE id = ANY ("{17579, 17580, 17582}");
.. ami tehát kezdetben valamivel gyorsabban teljesít (nincs szükség átalakításra).
A kérdésben szereplő űrlap is hatékonyan teljesít nagyon hasonló.
Nagy listák esetén a tömb megsemmisítése , majd egy JOIN
követése :
SELECT m.* FROM unnest("{17579, 17580, 17582}"::int[]) id JOIN member_copy m USING (id);
Mivel a lista is the result of another database query
, a leggyorsabb mindkettőt kombinálni az egyben egy JOIN
lekérdezéssel.
Részletesebb magyarázat:
Válasz
Egyetlen azonosító esetében a következő lekérdezés működött nekem:
SELECT * FROM member_copy WHERE id IN ("17579");
Megjegyzések
- Meg tudnád magyarázni, hogy ez miként válaszol az OP-ra?