Suljettu. Tämä kysymys on aiheen ulkopuolella . Se ei tällä hetkellä hyväksy vastauksia.
kommentit
- Jos lausekkeita on todella 800, mielestäni sinun pitäisi työskennellä sovelluksesi kanssa
Vastaa
Tapa kirjoittaa kysely on:
SELECT * FROM member_copy WHERE id IN (17579, 17580, 17582);
Todellinen kysymys on kuitenkin, missä tulivatko id
-luettelot? Jos id
-luettelo on toisen tietokantakyselyn tulos, sinun tulisi tehdä joko alivalinta tai liittyminen.
Kommentit
- toimi täydellisesti. Se ei ollut tietokantakyselystä, joku todella kävi läpi ja poimi jokaisen numeron. En kadehdi heitä.
Vastaa
Testi EXPLAIN ANALYZE VERBOSE
näyttää, että lomake id IN (...)
-vastauksessa @ 200_success muunnetaan sisäisesti muotoon:
SELECT * FROM member_copy WHERE id = ANY ("{17579, 17580, 17582}");
.. joka sen vuoksi toimii aluksi hieman nopeammin (muuntamista ei tarvita).
Myös kysymyksessä oleva lomake toimii tehokkaasti hyvin samankaltainen.
Suurilla luetteloilla poistetaan matriisi ja sen jälkeen JOIN
on yleensä nopeampi :
SELECT m.* FROM unnest("{17579, 17580, 17582}"::int[]) id JOIN member_copy m USING (id);
Koska luettelo on is the result of another database query
, se on nopein yhdistää molemmat yksi kysely JOIN
.
Tarkempi selitys:
Vastaus
Yhden tunnuksen osalta seuraava kysely toimi minulle:
SELECT * FROM member_copy WHERE id IN ("17579");
Kommentit
- Voisitko selittää, miten tämä vastaa toimenpidekokonaisuutta?