Devo scrivere una query per recuperare un grande elenco di ID.
Supportiamo molti backend (MySQL, Firebird, SQLServer, Oracle, PostgreSQL ...), quindi ho bisogno di scrivere un SQL standard.
La dimensione del set di ID potrebbe essere grande, la query verrebbe generata a livello di codice. Quindi, qual è l'approccio migliore?
1) Scrivere una query usando IN
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
La mia domanda qui è. Cosa succede se n è molto grande? Inoltre, per quanto riguarda le prestazioni?
2) Scrivere una query usando OR
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
Penso che questo approccio non abbia n limiti, ma che dire delle prestazioni se n è molto grande?
3) Scrivere una soluzione programmatica:
foreach (var id in myIdList)
{
var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
myObjectList.Add(item);
}
Abbiamo riscontrato alcuni problemi con questo approccio quando il server di database viene interrogato sulla rete. Normalmente è meglio fare una query che recuperi tutti i risultati invece di fare molte piccole query. Forse sto sbagliando.
Quale sarebbe una soluzione corretta per questo problema?
IN
! Ho fatto il mio come soluzione 1 + 3. Solo la query finale è stata una, lunga stringa di query inviata a SQL per l'esecuzione.