Vergleichselementtypologie und Zugriffspläne

Ein Vergleichselement ist ein Element einer Suchbedingung, das eine Vergleichsoperation definiert oder impliziert. Vergleichselemente, die in der Regel in der WHERE-Klausel einer Abfrage angewendet werden, dienen zur Verringerung des Umfangs der Ergebnismenge, die von der Abfrage zurückgegeben wird.

Vergleichselemente lassen sich je nachdem, wie und wann sie im Auswertungsprozess verwendet werden, in vier Kategorien einteilen. In der folgenden Liste sind diese Kategorien in der Reihenfolge von der höchsten bis zur niedrigsten Leistung aufgeführt:
  1. Bereichsbegrenzende Vergleichselemente
  2. Im Index als Suchargument verwendbare Vergleichselemente
  3. Bei Daten als Suchargument verwendbare Vergleichselemente
  4. Restvergleichselemente
Das im Sinne von 'als Suchargument verwendbar' im Englischen verwendete Wort 'sargable' ist aus dem Begriff 'search argument' (Suchargument) abgeleitet.
In Tabelle 1 sind die Merkmale dieser Vergleichselementkategorien zusammengefasst.
Tabelle 1. Zusammenfassung der Merkmale der Vergleichselementkategorien
Merkmal Vergleichselementkategorie
Bereichsbegrenzend Im Index als Suchargument verwendbar Bei Daten als Suchargument verwendbar Rest
Verringern der Index-Ein-/Ausgabe Yes Nein Nein Nein
Verringern der Datenseitenein-/-ausgabe Yes Yes Nein Nein
Verringern der Anzahl von Zeilen, die intern übergeben werden Yes Yes Yes Nein
Verringern der Anzahl von Zeilen, die den Bedingungen entsprechen Yes Yes Yes Yes

Bereichsbegrenzende und im Index als Suchargument verwendbare Vergleichselemente

Bereichsbegrenzende Vergleichselemente begrenzen den Bereich einer Indexsuche. Sie geben Start- und Stoppschlüsselwerte für die Indexsuche an. Im Index als Suchargument verwendbare Vergleichselemente können den Bereich einer Suche nicht begrenzen, aber sie können mithilfe des Index ausgewertet werden, da die im Vergleichselement verwendeten Spalten Teil des Indexschlüssels sind. Betrachten Sie zum Beispiel den folgenden Index:
   INDEX IX1:  NAME    ASC,
               DEPT    ASC,
               MGR     DESC,
               SALARY  DESC,
               YEARS   ASC
Betrachten Sie dazu eine Abfrage, welche die folgende WHERE-Klausel enthält:
   where
     name = :hv1 and
     dept = :hv2 and
     years > :hv5
Die ersten beiden Vergleichselemente (name = :hv1 and dept = :hv2) sind bereichsbegrenzende Vergleichselemente, während years > :hv5 ein im Index als Suchargument verwendbares Vergleichselement ist.
Achtung: Wenn eine Sprungsuche oder eine Sprungsuche angewendet wird, wird years > :hv5 aus Leistungsgründen sowohl als ein bereichsbegrenztes Vergleichselement als auch als ein im Index als Suchargument verwendbares Vergleichselement behandelt.

Zur Auswertung dieser Vergleichselemente verwendet das Optimierungsprogramm Indexdaten, anstatt die Basistabelle zu lesen. Im Index als Suchargumente verwendbare Vergleichselemente verringern die Anzahl von Zeilen, die aus der Tabelle gelesen werden müssen, sie beeinflussen jedoch nicht die Anzahl von Indexseiten, auf die zugegriffen wird.

Bei Daten als Suchargument verwendbare Vergleichselemente

Vergleichselemente, die nicht vom Indexmanager ausgewertet werden können, aber von den Data Management Services (DMS, Datenverwaltungsservices), werden als bei Daten als Suchargument verwendbare Vergleichselemente bezeichnet. Für solche Vergleichselemente ist in der Regel ein Zugriff auf einzelne Zeilen einer Tabelle erforderlich. Bei Bedarf rufen die DMS die zur Auswertung des Vergleichselements benötigten Spalten sowie alle anderen Spalten ab, die für die SELECT-Liste benötigt werden, jedoch nicht aus dem Index abgerufen werden konnten.

Betrachten Sie zum Beispiel den folgenden Index, der für die Tabelle PROJECT definiert ist:
   INDEX IX0:  PROJNO ASC
In der folgenden Abfrage ist deptno = 'D11' als ein bei Daten als Suchargument verwendbares Vergleichselement zu betrachten.
   select projno, projname, respemp
     from project
     where deptno = 'D11'
     order by projno

Restvergleichselemente

Restvergleichselemente (engl. Residual Predicates) sind im Hinblick auf den Ein-/Ausgabeaufwand ungünstiger als der Zugriff auf eine Tabelle. Solche Vergleichselemente können durch folgende Merkmale gekennzeichnet sein:
  • Sie verwenden korrelierte Unterabfragen.
  • Sie verwenden quantifizierte Unterabfragen mit den Klauseln ANY, ALL, SOME oder IN.
  • Sie lesen LONG VARCHAR- oder LOB-Daten, die in einer von der Tabelle getrennten Datei gespeichert sind.
Solche Vergleichselemente werden von den Services für relationale Daten (RDS, Relational Data Services) ausgewertet.

Einige Vergleichselemente, die nur auf einen Index angewendet wurden, müssen erneut angewendet werden, wenn auf die Datenseite zugegriffen wird. Zum Beispiel wenden Zugriffspläne mit logischem Verknüpfen von Indizes über AND (Index ANDing) oder OR (Index ORing) die Vergleichselemente immer ein weiteres Mal als Restvergleichselemente an, wenn auf die Datenseite zugegriffen wird.