von Markus Winand.

Oracle Zugriffs- und Filterprädikate unterscheiden


Die Oracle Datenbank kann where-Bedingungen (Prädikate) auf drei verschiedene Arten anwenden:

Zugriffsprädikat („access“)

Die Zugriffsprädikate bestimmen den Anfangs- und End-Punkt beim Verfolgen der Blattknote-Liste.

Index-Filterprädikat („filter“ bei Indexzugriffen)

Index-Filterprädikate werden während des Durchsuchens der Blatt­kno­ten-Liste angewandt. Sie haben aber keinen Einfluss auf die Start- und Stopp-Bedingungen und grenzen den durchsuchten Indexbereich nicht ein.

Filterprädikat auf Tabellenebene („filter“ bei Tabellenzugriffen)

Prädikate, die sich auf Spalten beziehen, die nicht im Index sind, können erst auf Tabellenebene berücksichtigt werden. Dafür muss zuerst ein Tabellenzugriff durchgeführt werden.

Ausführungspläne, die mittels DBMS_XPLAN erstellt wurden (siehe Oracle Aus­führungspläne erstellen), zeigen die Prädikatstypen im „Predicate Information“-Bereich unter der tabellarischen Darstellung des Ausführungsplanes an:

------------------------------------------------------
| Id | Operation         | Name       | Rows  | Cost |
------------------------------------------------------
|  0 | SELECT STATEMENT  |            |     1 | 1445 |
|  1 |  SORT AGGREGATE   |            |     1 |      |
|* 2 |   INDEX RANGE SCAN| SCALE_SLOW |  4485 | 1445 |
------------------------------------------------------

Predicate Information (identified by operation id):
   2 - access("SECTION"=:A AND "ID2"=:B)
       filter("ID2"=:B)

Die Nummerierung vor den Prädikatstypen bezieht sich auf die Spalte „Id“ im Ausführungsplan. Die Operationen, zu denen es Prädikatsinformationen gibt, sind dort mit einem Stern gekennzeichnet.

Hinweis in eigener Sache

Ich biete SQL Schulungen, Optimierung und Beratung an. Auch der Kauf meines Buches „SQL Performance Explained“ (ab €9,95) unterstützt meine Arbeit an dieser Webseite.

Das Beispiel aus dem Kapitel „Performance und Skalierbarkeit“ zeigt einen INDEX RANGE SCAN mit Zugriffs- und Filterprädikaten. Die Oracle Datenbank hat die Eigenheit, manche Filterprädikate auch als Zugriffsprädikat anzu­zeigen – zum Beispiel ID2=:B oben.

Wichtig

Sobald ein Prädikat als Filterprädikat aufscheint, ist es auch ein Filterprädikat – unabhängig davon, ob es auch als Zugriffsprädikat ausgewiesen wird.

Das bedeutet, dass der INDEX RANGE SCAN den ganzen Indexbereich für die Bedingung SECTION=:A liest und den Filter ID2=:B auf jede Zeile anwendet.

Filterprädikate auf Tabellenebene werden beim entsprechenden Tabellen­zu­griff wie zum Beispiel TABLE ACCESS BY INDEX ROWID oder TABLE ACCESS FULL angezeigt.

Die Prädikatsinformationen werden von verschiedenen Werkzeugen auf unterschiedlichste Weise dargestellt. Oracle SQL Developer zeigt sie zum Beispiel unter der entsprechenden Operation, direkt im Ausführungsplan an.

Abbildung A.1 Zugriffs- und Filterprädikate in Oracle SQL Developer

Manche Werkzeuge zeigen die Prädikatsinformation gar nicht an. In diesem Fall kann die DBMS_XPLAN Methode verwendet werden.

Vorherige SeiteNächste Seite

Du kannst nicht alles an einem Tag lernen. Abonniere den Newsletter via E-Mail, Twitter oder RSS um sukzessive aufzuholen. Und sieh dir auch modern-sql.com an.

Über den Autor

Foto von Markus Winand

Markus Winand gibt auf modern-sql.com Einblick in SQL und zeigt, wie es von verschiedenen Systemen unterstützt wird. Zuvor machte er use-the-index-luke.com, was er noch immer wartet. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Mit Markus Winand verbinden

Markus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf Twitter
„Use The Index, Luke!“ von Markus Winand ist unter einer Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License lizenziert.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO | CC-BY-NC-ND 3.0 Lizenz