Anfang des Inhaltsbereichs

Hintergrunddokumentation Mit OR verknüpfte Suchbedingungen Dokument im Navigationsbaum lokalisieren

Bei SQL-Anweisungen, die mit OR verknüpfte Suchbedingungen enthalten, analysiert der SQL-Optimierer zunächst jede Suchbedingung einzeln.

Beispiel

b1 AND b2 AND (b3 OR (b4 AND b5))

Die Ausdrücke b1, b2 und (b3 OR (b4 AND b5)) werden zunächst einzeln analysiert. Wenn der Optimierer bei b1 oder b2 eine Gleichheitsbedingung auf Schlüsselspalten findet, dann muss er (b3 OR (b4 AND b5)) bei der Auswahl der Suchstrategie nicht berücksichtigen, weil der Suchbereich nicht sinnvoll weiter eingegrenzt werden kann.

Wenn keine Gleichheitsbedingung für Schlüsselspalten gefunden wird, werden die bis dahin nicht betrachteten, mit OR verknüpften Suchbedingungen weiter analysiert. Dabei geht der SQL-Optimierer folgendermaßen vor:

..

       1.      Umformen in die disjunktive Normalform

Beispiel

b1 AND b2 AND (b3 OR (b4 AND b5))

ergibt in der disjunktiven Normalform

(b1 AND b2 AND b3) OR (b1 AND b2 AND b4 AND b5)

       2.      Analyse des neuen Ausdrucks
Die neu gebildeten Klammerausdrücke werden separat analysiert.

       3.      Kostenermittlung
Die Kosten der verschiedenen Suchstrategien für die Klammerausdrücke der disjunktiven Normalform werden summiert. Wenn diese Summe kleiner als die anfangs ermittelten Kosten für die Suchstrategie ohne Betrachtung der mit OR verknüpften Suchbedingungen ist, werden diese verschiedenen Suchstrategien verwendet.

Beispiel

Wenn die Summe der Kosten von (b1 AND b2 AND b3) und (b1 AND b2 AND b4 AND b5) kleiner ist als die Kosten für die Suchstrategie für b1 und b2, dann werden Strategien für (b1 AND b2 AND b3) und (b1 AND b2 AND b4 AND b5) angewendet.

       4.      Die kostengünstigste Suchstrategie wird verwendet, um die SQL-Anweisung auszuführen.

Beispiele

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

Konzeptes des Datenbanksystems, Objekte im Schema HOTEL

Beispiel

SELECT * FROM hotel.customer
  WHERE name = 'Smith' AND firstname = 'Sally'
     OR name = 'Miller' AND firstname = 'Sally'

Qualifikation: name = 'Smith' AND firstname = 'Sally'
       OR name = 'Miller' AND firstname = 'Sally'

Primärschlüssel der Tabelle CUSTOMER: cno
Indizes über qualifizierte Spalten:
FULL_NAME_INDEX (name, firstname)
genutzte Suchstrategie 1. Prädikat:
EQUAL CONDITION FOR INDEX
genutzte Suchstrategie 2.
Prädikat: EQUAL CONDITION FOR INDEX

Mehrere AND-Terme sind mit einer OR-Bedingung verknüpft. Die AND-Bedingung hat eine höhere Priorität als die OR-Bedingung. Für jeden AND-Term wird die beste Zugriffstrategie bestimmt. Beide AND-Terme qualifizieren die beiden Index-Spalten mit einer Gleichheitsbedingung. Daher können sie jeweils mit einer EQUAL CONDITION FOR INDEX abgearbeitet werden. Die ADDL. QUALIFICATION ON INDEX wird ausgegeben, da die OR-verknüpften Spalten auch im Index überprüft werden.

Ergebnis der EXPLAIN-Anweisung

TABLENAME

COLUMN_OR_INDEX

STRATEGY

PAGECOUNT

CUSTOMER

 

DIFFERENT STRATEGIES FOR OR TERMS

34

 

FULL_NAME_INDEX

EQUAL CONDITION FOR INDEX

 

 

 

ADDNL. QUALIFICATION ON INDEX

 

 

NAME

(USED INDEX COLUMN))

 

 

FIRSTNAME

(USED INDEX COLUMN))

 

 

FULL_NAME_INDEX

EQUAL CONDITION FOR INDEX

 

 

 

ADDNL. QUALIFICATION ON INDEX

 

 

NAME

(USED INDEX COLUMN))

 

 

FIRSTNAME

(USED INDEX COLUMN))

 

 

 

RESULT IS COPIED,
COSTVALUE IS

14

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

Siehe auch:

EXPLAIN-Anweisung

Liste aller Suchstrategien

Ende des Inhaltsbereichs