Ich bin mit Oracle nicht so vertraut, wie ich es gerne hätte. Ich habe ungefähr 250.000 Datensätze und möchte sie 100 pro Seite anzeigen. Derzeit habe ich eine gespeicherte Prozedur, die alle eine Viertelmillion Datensätze mithilfe eines Datenadapters und eines Datensatzes sowie der Methode dataadapter.Fill (Datensatz) für die Ergebnisse des gespeicherten Prozesses in einen Datensatz abruft. Wenn ich "Seitenzahl" und "Anzahl der Datensätze pro Seite" als ganzzahlige Werte habe, die ich als Parameter übergeben kann, ist dies der beste Weg, um nur diesen bestimmten Abschnitt zurückzugewinnen. Sagen wir, wenn ich 10 als Seitenzahl und 120 als Seitenzahl übergebe, würde es mir aus der select-Anweisung den 1880. bis 1200. geben, oder so ähnlich, meine Mathematik in meinem Kopf könnte aus sein.
Ich mache das in .NET mit C #, dachte, das ist nicht wichtig. Wenn ich es auf der SQL-Seite richtig machen kann, sollte ich cool sein.
Update: Ich konnte Brians Vorschlag verwenden und er funktioniert hervorragend. Ich würde gerne an einer Optimierung arbeiten, aber die Seiten werden in 4 bis 5 Sekunden anstatt in einer Minute angezeigt, und meine Paging-Steuerung konnte sich sehr gut in meine neuen gespeicherten Prozesse integrieren.
quelle
WHERE
nicht kombiniert werden konntenAND
, und fand dies dann: orafaq.com/wiki/ROWNUMFragen Sie Tom nach Paginierung und sehr, sehr nützlichen Analysefunktionen.
Dies ist ein Auszug aus dieser Seite:
quelle
Der Vollständigkeit halber gibt es in Oracle 12c für Benutzer, die nach einer moderneren Lösung suchen, einige neue Funktionen, darunter besseres Paging und Top-Handling.
Paging
Das Paging sieht folgendermaßen aus:
Top N Rekorde
Das Abrufen der Top-Rekorde sieht folgendermaßen aus:
Beachten Sie, dass beide obigen Abfragebeispiele
ORDER BY
Klauseln enthalten. Die neuen Befehle berücksichtigen diese und werden für die sortierten Daten ausgeführt.Ich konnte keine gute Oracle-Referenzseite für
FETCH
oder finden,OFFSET
aber diese Seite bietet einen großartigen Überblick über diese neuen Funktionen.Performance
Wie @wweicker in den Kommentaren unten hervorhebt, ist die Leistung ein Problem mit der neuen Syntax in 12c. Ich hatte keine Kopie von 18c zum Testen, ob Oracle sie seitdem verbessert hat.
Interessanterweise wurden meine tatsächlichen Ergebnisse etwas schneller zurückgegeben, als ich die Abfragen für die neue Methode zum ersten Mal in meiner Tabelle (113 Millionen + Zeilen) ausführte:
Wie @wweicker bereits erwähnte, sieht der EXPLAIN-Plan für die neue Methode jedoch viel schlechter aus:
Die neue Syntax führte zu einem vollständigen Scan des Index in meiner Spalte, was die gesamten Kosten darstellte. Es besteht die Möglichkeit, dass sich die Situation bei der Beschränkung auf nicht indizierte Daten erheblich verschlechtert.
Lassen Sie uns einen Blick darauf werfen, wenn Sie eine einzelne nicht indizierte Spalte in den vorherigen Datensatz aufnehmen:
Zusammenfassung: Seien Sie vorsichtig, bis Oracle diese Behandlung verbessert. Wenn Sie einen Index haben, mit dem Sie arbeiten können, können Sie möglicherweise mit der neuen Methode davonkommen.
Hoffentlich habe ich bald eine Kopie von 18c zum Spielen und kann sie aktualisieren
quelle
Ich möchte nur die Antworten und Kommentare zusammenfassen. Es gibt verschiedene Möglichkeiten, eine Paginierung durchzuführen.
Vor Oracle 12c gab es keine OFFSET / FETCH-Funktionalität. Schauen Sie sich also das Whitepaper an, wie von @jasonk vorgeschlagen. Es ist der vollständigste Artikel, den ich über verschiedene Methoden mit einer detaillierten Erklärung der Vor- und Nachteile gefunden habe. Das Kopieren und Einfügen würde viel Zeit in Anspruch nehmen, daher werde ich es nicht tun.
Es gibt auch einen guten Artikel von Joooq-Entwicklern, in dem einige häufige Einschränkungen bei der Paginierung von Orakeln und anderen Datenbanken erläutert werden. Joqs Blogpost
Gute Nachrichten, seit Oracle 12c haben wir eine neue OFFSET / FETCH-Funktionalität. Neue Funktionen von OracleMagazine 12c . Weitere Informationen finden Sie unter "Top-N-Abfragen und Paginierung".
Sie können Ihre Oracle-Version überprüfen, indem Sie die folgende Anweisung ausgeben
quelle
Versuche Folgendes:
über [tecnicume]
quelle
In meinem Projekt habe ich Oracle 12c und Java verwendet . Der Paging-Code sieht folgendermaßen aus:
quelle