... Nehmen wir mal an, der erste Zugriff erstellt aus der Abfrage eine temporäre Tabelle (auf dem Server) und holt von dort dann die erste Seite. ...
Leute, wir reden hier von 100 Mio Zeilen, die möglichst schnell durchlaufen werden sollen. Glaubt ihr ernsthaft, das eine andere Lösung als 'happenweise einlesen' besser oder auch nur im Ansatz brauchbar ist?.
Das Erstellen einer mehrere GiB großen temporären Tabelle dauert ewig, weil die Daten committed werden müssen und müllen den Server zu. Mach das ein paar mal (am Besten noch gleichzeitig) und egal wie viele TB Plattenplatz du
hasthattest, nu sindse weg. Und das alles nur, weil ein Programmierer die grandiose Idee hatte, eine Tabelle zu klonen, nur um in Ruhe in ihr rumscrollen zu können. Sofern die Vorgabe 'während des Rumstöberns will ich Änderungen nicht sehen' ist, könnte man noch drüber nachdenken, wobei dann ein serverseitiger Cursor mit entsprechendem Isolation Level einfacher wäre (wenn der Cursor das mit macht), aber hinsichtlich der Speicherverplemperei ebenso suboptimal.
Wir wissen ja, das rumstöbern in 100 Mio Datensätzen eh Blödsinn ist und daher muss man sich über solche Ansätze keine Gedanken machen. Wenn ich meine Daten unverändert abholen will, erstelle ich einfach einen application lock auf der Tabelle, hole das Zeugs ab und fertig ist die Laube. Es wäre vielleicht auch *sinnvoll*, das zu sperren, denn sonst sind die Ergebnisse widersprüchlich ('Aber ich habe doch die Änderungen gespeichert? Wieso sieht man das in der Statistik nicht? In meiner sieht man das aber, und die wurde zur gleichen Zeit erstellt. Admin: Du bist gefeuert!')