Anfang des Inhaltsbereichs

Hintergrunddokumentation Suchbedingungen für indizierte Spalten Dokument im Navigationsbaum lokalisieren

Wenn die SQL-Anweisung Suchbedingungen für indizierte Spalten enthält, kann der SQL-Optimierer folgende Suchstrategien verwenden:

Suchbedingung

Suchstrategie des SQL-Optimierers

Gleichheitsbedingung für die indizierten Spalten

Es wird auf die Zeilen zugegriffen, deren Schlüssel in der zugehörigen Invertierungsliste enthalten sind.

IN-Bedingung für indizierte Spalten

Es wird auf die Zeilen zugegriffen, deren Schlüssel in den Invertierungslisten enthalten sind.

Bereichsbedingungen mit nur einer Bedingung ( <, <=, >, >= ) für eine der beiden Bereichsgrenzen (Unter- bzw. Obergrenze).

Es wird auf die Zeilen zugegriffen, deren Schlüssel in den Invertierungslisten enthalten sind, die durch den Bereich bestimmt wurden.

Bereichsbedingungen, bei denen beide Bereichsgrenzen angegeben sind. Für die Auswahl der Suchstrategie ist es unerheblich, ob diese Angabe durch einen BETWEEN-Operator oder durch zwei durch AND verknüpfte Bedingungen ( <= bzw. >= ) für dieselbe Spalte erfolgt.

Es wird auf die Zeilen zugegriffen, deren Schlüssel in den Invertierungslisten enthalten sind, die durch den Bereich bestimmt wurden.

Im Fall der Gleichheit/IN-Bedingungen und der Bereichsbedingungen gibt es auch Anfragen, bei denen darauf verzichtet werden kann, auf die Zeilen zuzugreifen, da alle notwendigen Werte bereits in der/den Invertierungsliste(n) enthalten sind.

Beispiele

Die bei den Erläuterungen zum SQL-Optimierer verwendeten Beispiele stützen sich auf die Demo-Datenbank DEMODB und ihre Demo-Daten im Schema HOTEL.

Konzepte des Datenbanksystems, Objekte im Schema HOTEL

Gleichheitsbedingung

Beispiel

SELECT * FROM hotel.customer
  WHERE name =
'Wagner'

Qualifikation: name = 'Wagner'
Primärschlüssel der Tabelle CUSTOMER: cno
Indizes über qualifizierte Spalten: FULL_NAME_INDEX (name, firstname)
genutzte Suchstrategie: RANGE CONDITION FOR INDEX

Da die Gleichheitsbedingung nur über die erste Indexspalte angegeben ist, muss diese SQL-Anweisung mit einer RANGE CONDITION abgearbeitet werden – es kann im Index mehrere Einträge mit dem Wert Wagner geben.

Der Startschlüssel wird beim ersten Satz gesetzt, der die Gleichheitsbedingung in der ersten Indexspalte erfüllt (Wagner). Der Stoppschlüssel liegt bei dem ersten Satz, der der Bedingung nicht mehr genügt (Walker).

Ergebnis der EXPLAIN-Anweisung

TABLENAME

COLUMN_OR_INDEX

STRATEGY

PAGECOUNT

CUSTOMER

FULL_NAME_INDEX

RANGE CONDITION FOR INDEX

34

 

NAME

(USED INDEX COLUMN)

 

 

 

RESULT IS NOT COPIED,
COSTVALUE IS


2

IN-Bedingung

Beispiel

SELECT * FROM hotel.customer
  WHERE name IN (
'Smith', 'Miller')

Qualifikation: name = IN ('Smith', 'Miller')
Primärschlüssel der Tabelle CUSTOMER: cno
Indizes über qualifizierte Spalten: FULL_NAME_INDEX (name, firstname)
genutzte Suchstrategie: IN CONDITION FOR INDEX

Die SQL-Anweisung wird mit einer IN-Bedingung abgearbeitet. Der SQL-Optimierer hat auch die entsprechende RANGE-Bedingung bewertet, diese wäre bei den gegebenen Werten jedoch teurer.

Ergebnis der EXPLAIN-Anweisung

TABLENAME

COLUMN_OR_INDEX

STRATEGY

PAGECOUNT

CUSTOMER

FULL_NAME_INDEX

IN CONDITION FOR INDEX

34

 

NAME

(USED INDEX COLUMN)

 

 

 

RESULT IS NOT COPIED,
COSTVALUE IS


21

Bereichsbedingung

Legen Sie einen einspaltigen Index EMPLOYEE_ENO über die Spalte ENO an.

Siehe auch:

SQL-Referenzhandbuch, CREATE INDEX-Anweisung (create_index_statement)

Beispiel

SELECT eno, hno FROM hotel.employee
  WHERE eno >= 8

Qualifikation: eno >= 8
Primärschlüssel der Tabelle EMPLOYEE: hno, eno
Indizes über qualifizierte Spalten: EMPLOYEE_ENO (eno)
genutzte Suchstrategie: RANGE CONDITION FOR INDEX

Diese SQL-Anweisung kann mit einer INDEX ONLY-Strategie abgearbeitet werden, weil nur Spalten aus dem Index und dem Primärschlüssel in der SELECT-Liste angegeben sind und im Indexbaum die Primärschlüsselspalten mit abgelegt sind.

Der Zugriff erfolgt über den Index EMPLOYEE_ENO. Der Startschlüssel wird beim ersten Satz gesetzt, der die Größer-Bedingung erfüllt – also beim Wert 8. Der Stoppschlüssel wird auf den letzten Satz des Index gesetzt.

Ergebnis der EXPLAIN-Anweisung

TABLENAME

COLUMN_OR_INDEX

STRATEGY

PAGECOUNT

EMPLOYEE

EMPLOYEE_ENO

RANGE CONDITION FOR INDEX

45

 

 

ONLY INDEX ACCESSED

 

 

ENO

(USED INDEX COLUMN)

 

 

 

RESULT IS NOT COPIED,
COSTVALUE IS


45

Bei einer BETWEEN-Bedingung wird der Stoppschlüssel nicht auf das Ende des Index gesetzt, sondern auf den letzten Eintrag, der der RANGE-Bedingung entspricht.

Weitere einfache Beispiel-SQL-Anweisungen finden Sie im StrukturlinkSQL-Tutorial.

Siehe auch:

EXPLAIN-Anweisung

Suchbedingungen für Schlüsselspalten

Liste aller Suchstrategien

Ende des Inhaltsbereichs