Sie können die SQL-Trace-Funktion dazu nutzen, Erklärungen zu bestimmten Oracle-Anweisungen anzuzeigen. Aus der Anzeige einer Trace-Datei heraus können Sie die Funktion Explain SQL nutzen, um mehr Informationen zu einer bestimmten Datenbankanweisung anzuzeigen. Die Explain-Funktion steht nur für PREPARE- und REOPEN-Operationen zur Verfügung. So analysieren Sie eine Anweisung:
Das Explain-Bild zeigt die Datenbankstrategie für die gewählte Operation.
Wenn Sie mit einer ORACLE-Datenbank arbeiten, können Sie z.B. die Analyse für die folgende Anweisung anzeigen:
select * from fllog where flcode = '00000123'.
Das System zeigt folgendes an:
OPERATION | OPTIONS | OBJECT NAME | ID | PAID | POS | |||||
---|---|---|---|---|---|---|---|---|---|---|
SELECT STATEMENT |
|
|
0 |
|
|
|
||||
TABLE ACCESS BY ROWID |
|
FLLOG |
1 |
0 |
1 |
|||||
INDEX UNIQUE SCAN |
|
FLLOG___0 |
2 |
1 |
1 |
|||||
QUERY PLAN
SELECT STATEMENT |
|
|
|
TABLE ACCESS BY ROWID |
FLLOG |
|
INDEX UNIQUE SCAN |
FLLOG___0(UNIQUE) |
Die Felder in der Anzeige haben folgende Bedeutung:
OPERATION |
Name der Operation. |
OPTIONS |
Eigenschaften der Operation. |
OBJEKT NAME |
Objekt, das an der Operation beteiligt ist. |
ID |
ID-Nummer der Operation. |
PAID |
ID-Nummer, an die die aktuelle Operation ihre Ergebnisse übergibt. Das ist wichtig, wenn geschachtelte Zugriffe auf verschiedenen Hierarchieebenen beteiligt sind. |
POS |
Identifiziert die nächste Nummer für Operationen, die auf derselben Hierarchieebene stattfinden. |
In obigen Beispiel ist der Schlüssel voll qualifiziert. Die Datenbank kann mit dem Primärschlüsselindex FLLOG__0 auf die Tabellensätze zugreifen. Jede transparente Tabelle im ABAP-Dictionary hat einen Primärschlüssel. Das System legt automatisch einen Index für diesen Schlüssel an. Der Primärschlüssel ist eindeutig, d.h., es gibt nur einen Indexeintrag für jede Zeile der Tabelle. Das System benutzt deshalb die Operation UNIQUE SCAN.
Die Operation UNIQUE SCAN erhält die ID 2 und die Parent ID 1. Das bedeutet, daß diese Operation ihre Ergebnisse an die Operation mit der ID 1 übergibt. Die ID 1 gehört zur Operation TABLE ACCESS. TABLE ACCESS kann wegen der Eindeutigkeit des Index BY ROWID direkt auf einen Satz zugreifen. Sobald das System eine Zugriffsstrategie gewählt hat, sendet es die SELECT-Anweisung mit ID 0 an die Datenbank.
Wenn die SELECT-Anweisung keinen voll qualifizierten Schlüssel angibt, muß die Datenbank möglicherweise die Sätze mit einem FULL TABLE SCAN lesen. In diesem Fall gibt es keinen Index, und die Datenbank liest die gesamte Tabelle in Paketen.
Wenn der Index nicht eindeutig ist, verwendet die Datenbank einen RANGE SCAN. RANGE SCAN ist ein generischer Zugriff bei dem ein Indexbereich durchsucht wird, der relevante Daten enthalten könnte.
Die Operation NESTED LOOP ist für geschachtelte Lesezugriffe bestimmt, wobei mehrere Indizes für einen Datenbankzugriff zusammengefasst werden.