Wir hatten das gleiche Problem und lösten es, indem wir es in 100er Pakete der IN-Klausel aufteilten
select * from mytable where id in (...) or id in (...).
Bemerkung:
- stellen Sie sicher, dass Sie Bindungsvariablen verwenden
- dafür sorgen, dass die Abfrage immer gleich aussieht. Dazu werden die IN-Klauseln mit -1 aufgefüllt, bis sie 100 Elemente enthalten
- versuchen, immer die gleiche Anzahl von ORed in(...) zu verwenden, damit die Abfrage immer gleich aussieht
Warum wollen Sie die oben genannten Punkte? Damit der Abfrageoptimierer den Abfrageplan wiederverwenden kann.
Zusätzliche Optimierung:
- Anstatt -1 zu verwenden, können Sie einfach wieder den letzten wahren Wert verwenden. Das ist sogar noch ein bisschen besser.
Beispiel: in(1, 2, 3, 4, 4, ..., 4)
Anmerkung: Wir haben mit verschiedenen festen Zahlen von Elementen in der in-Klausel getestet und bei mehr als 100 Elementen Leistungseinbußen festgestellt.