Anfang des Inhaltsbereichs

Hintergrunddokumentation EXPLAIN-Anweisung für SELECT-Anweisungen mit Unterabfragen Dokument im Navigationsbaum lokalisieren

Um die Kosten für Suchstrategien zu ermitteln, bei denen der Wert einer Spalte mit den Trefferzeilen einer Unterabfrage (Subquery) verglichen wird, muss der SQL-Optimierer die Anzahl der Trefferzeilen kennen. Die Anzahl der Trefferzeilen ist jedoch erst nach der Abarbeitung der Unterabfrage bekannt.

Die EXPLAIN-Anweisung für eine SELECT-Anweisung mit Unterabfragen ermittelt die möglichen Suchstrategien, ohne die enthaltenen Unterabfragen auszuführen. Daher wird in der Regel für die äußere SQL-Anweisung die Suchstrategie NO STRATEGY NOW (ONLY AT EXECUTION TIME) angezeigt.

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.

Konzepte des Datenbanksystems, Objekte im Schema HOTEL

Beispiel

EXPLAIN
SELECT name FROM hotel.city
  WHERE name IN (SELECT name FROM hotel.hotel)

Qualifikation: name IN (SELECT name FROM hotel.hotel)
Primärschlüssel der Tabelle CITY:
zip
Primärschlüssel der Tabelle HOTEL: cno
Indizes über qualifizierte Spalten: keine
genutzte Suchstrategie äußeres SELECT: TABLE SCAN
genutzte Suchstrategie Subquery: TABLE SCAN

Ergebnis der EXPLAIN-Anweisung

TABLENAME

COLUMN_OR_INDEX

STRATEGY

PAGECOUNT

HOTEL

 

TABLE SCAN

8

CITY

 

TABLE SCAN

11

 

 

RESULT IS COPIED
COSTVALUE IS


101

Es werden alle Städtenamen selektiert, nach denen ein Hotel benannt ist. Da für beide Tabellen kein passender Index existiert und nicht auf die Primärschlüsselspalten eingeschränkt wird, werden beide SELECT-Anweisungen mit einem TABLE SCAN abgearbeitet.

Beispiel

EXPLAIN
SELECT cno, name FROM hotel.customer
  WHERE cno = ANY(SELECT cno FROM hotel.reservation WHERE arrival >
'2005-01-01')

Qualifikation: cno = ANY(SELECT cno FROM hotel.reservation WHERE arrival > '2005-01-01')
Primärschlüssel der Tabelle CUSTOMER:
cno
Primärschlüssel der Tabelle RESERVATION: rno
Indizes über qualifizierte Spalten: keine
genutzte Suchstrategie äußeres SELECT: NO STRATEGY NOW (ONLY AT EXECUTION TIME)
genutzte Suchstrategie Subquery: TABLE SCAN

Ergebnis der EXPLAIN-Anweisung

TABLENAME

COLUMN_OR_INDEX

STRATEGY

PAGECOUNT

RESERVATION

 

TABLE SCAN

24

CUSTOMER

 

NO STRATEGY NOW (ONLY AT EXECUTION TIME)

 

 

 

RESULT IS COPIED
COSTVALUE IS

 

Es werden alle Kunden angezeigt, die alle Buchungen ab einem vorgegebenen Datum getätigt haben. Für die Tabelle RESERVATION wird ein TABLE SCAN durchgeführt. Für die äußere SELECT-Anweisung wird die Suchstrategie NO STRATEGY NOW (ONLY AT EXECUTION TIME) angezeigt.

Weitere einfache Beispiel-SQL-Anweisungen finden Sie im SQL-Tutorial, StrukturlinkSubquery: Innere Abfragen.

Siehe auch:

SUBQ CONDITION FOR KEY

SUBQ CONDITION FOR INDEX

Liste aller Suchstrategien

SQL-Referenzhandbuch, Subquery (subquery)

Ende des Inhaltsbereichs