Sposób zapisania tego zapytania jest następujący:
SELECT * FROM member_copy WHERE id IN (17579, 17580, 17582);
Jednak prawdziwe pytanie brzmi: gdzie czy ta lista id
pochodzi z? Jeśli lista id
s jest wynikiem innego zapytania do bazy danych, powinieneś zamiast tego dokonać podselekcji lub złączenia.
Komentarze
Test z EXPLAIN ANALYZE VERBOSE
pokazuje, że formularz z id IN (...)
w odpowiedzi @ 200_success jest wewnętrznie przekształcany na:
SELECT * FROM member_copy WHERE id = ANY ("{17579, 17580, 17582}");
.. dlatego na początku działa nieco szybciej (nie jest wymagana konwersja).
Ponadto formularz w pytaniu będzie skuteczny bardzo podobna.
W przypadku dużych list rozpakowanie tablicy , a następnie JOIN
będzie generalnie szybsze :
SELECT m.* FROM unnest("{17579, 17580, 17582}"::int[]) id JOIN member_copy m USING (id);
Ponieważ lista to is the result of another database query
, najszybsze będzie połączenie obu w jeden zapytanie z JOIN
.
Bardziej szczegółowe wyjaśnienie:
Dla jednego identyfikatora zadziałało następujące zapytanie:
SELECT * FROM member_copy WHERE id IN ("17579");
Komentarze