Ich stelle eine sehr einfache Abfrage gegen eine Tabelle mit 15.000.000 Zeilen aus. Ich erlebe ein unberechenbares Verhalten bezüglich der rownum
Grenzen.
Zum Beispiel funktioniert die folgende Abfrage ohne Probleme:
select * from (select * from my_table order by id) where rownum < 2000000
sowie auch diese:
select * from (select * from my_table order by id) where rownum between 1 and 15
aber diese hier wird nie abgeschlossen:
select * from (select * from my_table order by id) where rownum between 2 and 15
Ich kann dieses Verhalten nicht erklären: Wenn die untere Grenze 0 beträgt, kann die obere Grenze riesig sein, ohne Probleme zu verursachen. Aber wenn die untere Grenze nur zwei beträgt, wird die Abfrage nie abgeschlossen. Es ist auch seltsam, dass es keine Zwischenlösung gibt: Es wird entweder fast sofort zurückgegeben oder es wird nie fertig.
Die Tabelle ist indiziert nach der id
Spalte und es handelt sich um einen asc
-sortierten Index; ansonsten gehe ich davon aus, dass es zur Suche nach nur dem ersten Datensatz einen vollständigen Tabellenscan erfordern würde.
Wo sollte ich nachforschen, um dies zu beheben?
Mein Datenbank ist Oracle Database 11g Release 11.2.0.3.0 - 64bit Production