Ich muss eine Abfrage schreiben, um eine große Liste von IDs abzurufen.
Wir unterstützen viele Backends (MySQL, Firebird, SQLServer, Oracle, PostgreSQL ...), daher muss ich ein Standard-SQL schreiben.
Die Größe des ID-Satzes könnte groß sein, die Abfrage würde programmgesteuert generiert. Was ist der beste Ansatz?
1) Schreiben einer Abfrage mit IN
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
Meine Frage hier ist. Was passiert, wenn n sehr groß ist? Und was ist mit der Leistung?
2) Schreiben einer Abfrage mit ODER
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
Ich denke, dass dieser Ansatz keine n-Grenze hat, aber was ist mit der Leistung, wenn n sehr groß ist?
3) Schreiben einer programmatischen Lösung:
foreach (var id in myIdList)
{
var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
myObjectList.Add(item);
}
Bei diesem Ansatz sind einige Probleme aufgetreten, wenn der Datenbankserver über das Netzwerk abgefragt wird. Normalerweise ist es besser, eine Abfrage durchzuführen, bei der alle Ergebnisse abgerufen werden, als viele kleine Abfragen durchzuführen. Vielleicht bin ich falsch.
Was wäre eine richtige Lösung für dieses Problem?
IN
! Auf 80 ms ! Ich habe meine als Ihre Lösung 1 + 3 gemacht. Nur die letzte Abfrage war eine lange Abfragezeichenfolge, die zur Ausführung an SQL gesendet wurde.