Das Hauptproblem bei Fall 2 besteht darin, dass in vielen Fällen die gesamte Abfrageergebnismenge abgerufen und dann vorher sortiert werden muss die ersten N Zeilen können zurückgegeben werden - es sei denn, die ORDER BY-Spalten sind indiziert und Oracle kann den Index verwenden, um eine Sortierung zu vermeiden. Bei einer komplexen Abfrage und einem großen Datensatz kann dies einige Zeit dauern. Es gibt jedoch einige Dinge, die Sie tun können, um die Geschwindigkeit zu verbessern:
- Versuchen Sie sicherzustellen, dass keine Funktionen im inneren SQL aufgerufen werden - diese werden möglicherweise 5 Millionen Mal aufgerufen, nur um die ersten 20 Zeilen zurückzugeben. Wenn Sie diese Funktionsaufrufe in die äußere Abfrage verschieben können, werden sie weniger aufgerufen.
- Verwenden Sie einen FIRST_ROWS_n-Hinweis, um Oracle dahingehend zu optimieren, dass Sie niemals alle Daten zurückgeben werden.
BEARBEITEN:
Ein weiterer Gedanke:Sie präsentieren dem Benutzer gerade einen Bericht, der könnte Tausende oder Millionen von Zeilen zurückgeben, aber der Benutzer wird realistischerweise nie alle durchblättern. Können Sie sie nicht zwingen, eine kleinere Datenmenge auszuwählen, z. indem Sie den ausgewählten Datumsbereich auf 3 Monate (oder was auch immer) beschränken?