Oracle Top 10 Datensatzauswahl: Filtern, Sortieren und Optimieren
Das Abrufen der zehn wichtigsten Datensätze in Oracle ist normalerweise einfach, aber das Hinzufügen von Filtern und das Priorisieren der Leistung bringt Herausforderungen mit sich. Eine aktuelle Stack Overflow-Frage hat dies hervorgehoben und sich auf die Auswahl der Top-Ten-Datensätze basierend auf einer bestimmten Spalte konzentriert, während Datensätze ausgeschlossen wurden, die eine bestimmte Bedingung erfüllen.
Die ursprüngliche Abfrage und ihre Mängel
Die ursprüngliche SQL-Abfrage zielte darauf ab, eindeutige Datensätze anhand mehrerer Kriterien auszuwählen: Speicherkapazität ungleich Null, Ausschluss von Datensätzen von einem bestimmten Datum und absteigende Reihenfolge nach Speicherkapazität. Die Abfrage konnte die Ergebnisse jedoch nicht korrekt auf die Top Ten beschränken.
<code class="language-sql">SELECT DISTINCT APP_ID, NAME, STORAGE_GB, HISTORY_CREATED, TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE FROM HISTORY WHERE STORAGE_GB IS NOT NULL AND APP_ID NOT IN (SELECT APP_ID FROM HISTORY WHERE TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') = '06.02.2009') </code>
Einfaches Hinzufügen von ROWNUM <= 10
zu dieser Abfrage würde nicht zu den richtigen Top 10 führen, da ROWNUM
bevor der ORDER BY
-Klausel verarbeitet wird.
Die Lösung: Ein Unterabfrage-Ansatz
Die effektive Lösung verwendete eine Unterabfrage, um Filterung und Sortierung korrekt anzuwenden:
<code class="language-sql">SELECT * FROM ( SELECT DISTINCT APP_ID, NAME, STORAGE_GB, HISTORY_CREATED, TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE FROM HISTORY WHERE STORAGE_GB IS NOT NULL AND APP_ID NOT IN (SELECT APP_ID FROM HISTORY WHERE TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') ='06.02.2009') ORDER BY STORAGE_GB DESC ) WHERE ROWNUM <= 10</code>
Diese verschachtelte Struktur stellt sicher, dass die Datensätze zuerst geordnet werden und dann die Top Ten ausgewählt werden.
Leistungsverbesserungen
Über die Bestellkorrektur hinaus führt die Verwendung von EXISTS
anstelle von NOT IN
zu einer erheblichen Leistungssteigerung. EXISTS
bietet im Allgemeinen bessere Optimierungsmöglichkeiten, minimiert Verknüpfungen und verbessert die Geschwindigkeit der Abfrageausführung.
Das obige ist der detaillierte Inhalt vonWie wählt man die Top-10-Datensätze in Oracle durch Filtern und Sortieren effizient aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!