Muszę napisać zapytanie, aby pobrać dużą listę identyfikatorów.
Obsługujemy wiele backendów (MySQL, Firebird, SQLServer, Oracle, PostgreSQL ...), więc muszę napisać standardowy SQL.
Rozmiar zestawu id mógłby być duży, zapytanie byłoby generowane programowo. Więc jakie jest najlepsze podejście?
1) Pisanie zapytania za pomocą IN
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
Moje pytanie brzmi. Co się stanie, jeśli n jest bardzo duże? A co z wydajnością?
2) Pisanie zapytania przy użyciu OR
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
Myślę, że to podejście nie ma limitu n, ale co z wydajnością, jeśli n jest bardzo duże?
3) Pisanie rozwiązania programistycznego:
foreach (var id in myIdList)
{
var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
myObjectList.Add(item);
}
Wystąpiły pewne problemy z tym podejściem, gdy serwer bazy danych był odpytywany przez sieć. Zwykle lepiej jest wykonać jedno zapytanie, które spowoduje pobranie wszystkich wyników, niż wykonanie wielu małych zapytań. Może się mylę.
Jakie byłoby prawidłowe rozwiązanie tego problemu?
IN
! Zrobiłem swoje jako twoje rozwiązanie 1 + 3. Tylko ostatnie zapytanie było jednym, długim ciągiem zapytania wysłanym do SQL w celu wykonania.