Hallo Erwin,
in einigen spezialfällen wickelt der optimizer das order-by
aber über einen full-index-scann ab (der index ist ja schon
vorsortiert). und in genau diesen fällen kommt das order-by
VOR der where-klausel (besser gesagt, die daten werden bereits
vorsortiert gelesen un die order-by-klausel fällt weg). der
index alleine reicht aber nicht - vermutlich müssen die
statistiken auch passen, damit der optimizer diesen weg
einschlägt.
Stimmt, an diesen Spezialfall hab ich gar nicht gedacht. Das Ganze verlässt sich aber - wie du eh schriebst - auf zwei Voraussetzungen: a) dass der Optimizer sich entscheidet, das Ganze rein über den Index abzuwickeln (was er schon einmal nicht tun kann, wenn Spalten, die nicht im Index enthalten sind, mitselektiert werden)
und
b) dass der Index physikalisch bereits (richtig) sortiert vorliegt. Das klingt jetzt vielleicht blöd, aber wenn sich morgen früh der DBA entscheidet, den Index ab sofort absteigend zu sortieren, weil das bei einer anderen Query ein Problem erschlägt, dann schaut man blöd aus der Wäsch’.
Übrigens liefert die Variante mit ROWNUM und ORDER BY auch das richtige Ergebnis, wenn die Daten in der Tabelle schon richtig sortiert vorliegen - das halte ich von den Voraussetzungen her auch schon fast für gleichwertig.
insofern revidiere ich meine aussage: die methode ist für
produktivsysteme völlig unbrauchbar, da nicht deterministisch.
Sag’ ich doch 
in manchen spezialfällen aber leichter zu tippen und
vermutlich für die datenbank ressourcenschonener. die lösung
über die inline-view müsste meines erachtens nach mehr platz
im temp-tablespace verbrauchen…
Wenn der Optimizer intelligent ist, dann kann er mit dem Inline-View genau den gleichen Plan verwenden, wie mit deiner Lösung, allerdings halt nur dann, wenn auch die Voraussetzungen gegeben sind. Wenn dem nicht so ist, dann kommt er an einem (memory oder disk) sort ohnehin nicht vorbei. Einzige Alternative wäre da dann ein falsches Ergebnis.
mea culpa - ich werde versuchen, in zukunft allgemeingültigere
behauptungen aufzustellen.
Ich hab’ mich nur gewundert, weil das meiner bisherigen Erfahrung nach eigentlich ein Anfängerfehler ist. Wenn bei unseren Vorstellungsgesprächen einer allzu forsch mit seinen super SQL-Kenntnissen zu landen versucht, dann kriegt er als ersten Stolperstein genau diese Frage.
Die einzig falsche Antwort ist die, die Du da angeführt hast. Sogar ein „weiss ich nicht“ werten wir da deutlich besser… Wenn er natürlich eine beliebige richtige Antwort kennt, dann kommt der nächste Bomber mit Platzierungen unter Berücksichtigung von ex-aequo Plätzen (wenn da einer draufkommt, dass man nur die Zeilen mit kleineren/grösseren Werten zählen muss, dann hat er schon fast gewonnen).
Gruß
Martin
lg
erwin