Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle schnellere Paging-Abfrage

Ich habe derzeit keine Verfügbarkeit von Oracle, aber die beste SQL-Abfrage zum Paging ist mit Sicherheit die folgende

select *
from (
        select rownum as rn, a.*
        from (
                select *
                from my_table
                order by ....a_unique_criteria...
            ) a
    )
where rownum <= :size
    and rn >  (:page-1)*:size

http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html

Um ein konsistentes Paging zu erreichen Sie sollten Zeilen anhand eines eindeutigen Kriteriums anordnen , dadurch wird vermieden, dass für Seite X eine Zeile geladen wird, die Sie bereits für Seite Y geladen haben ( !=X ).

BEARBEITEN:

1) Zeilen nach einem eindeutigen Kriterium anordnen bedeutet, Daten so anzuordnen, dass jede Zeile bei jeder Ausführung der Abfrage dieselbe Position behält

2) Ein Index mit allen Ausdrücken, die in der ORDER BY-Klausel verwendet werden, hilft dabei, Ergebnisse schneller zu erhalten, insbesondere für die ersten Seiten. Mit diesem Index muss der vom Optimierer gewählte Ausführungsplan die Zeilen nicht sortieren, da er Zeilen zurückgibt, die den Index in seiner natürlichen Reihenfolge scrollen.

3) Übrigens, der schnellste Weg, um das Ergebnis einer Abfrage anzuzeigen, besteht darin, die Abfrage nur einmal auszuführen und den gesamten Datenfluss von der Anwendungsseite aus zu handhaben.