DB2 Universal Database - Systemverwaltung


Übersetzen von Vergleichselementen

Der SQL-Compiler schreibt Abfragen um, um vorhandene Vergleichselemente für eine bestimmte Abfrage in eine optimierte Form zu bringen. Die folgenden Beispiele zeigen einige der Vergleichselemente, die vom SQL-Compiler übersetzt werden können:

Beispiel - Hinzufügen implizierter Vergleichselemente

Die folgende Abfrage erstellt eine Liste der Manager, deren Abteilung an Abteilung "E01" berichten, und der Projekte, für die die Manager verantwortlich sind:

   SELECT DEPT.DEPTNAME DEPT.MGRNO, EMP.LASTNAME, PROJ.PROJNAME
     FROM DEPARTMENT DEPT,
          EMPLOYEE   EMP,
          PROJECT    PROJ
    WHERE DEPT.ADMRDEPT = 'E01'
      AND DEPT.MGRNO = EMP.EMPNO
      AND EMP.EMPNO  = PROJ.RESPEMP

Beim Umschreiben der Abfrage wird das folgende implizierte Vergleichselement hinzugefügt:

   DEPT.MGRNO = PROJ.RESPEMP

Als Ergebnis dieses Umschreibens kann das Optimierungsprogramm weitere Verknüpfungen in die Berechnung mit einbeziehen, wenn es versucht, den günstigsten Zugriffsplan für die Abfrage auszuwählen.

Neben der oben gezeigten Ausnutzung der Transitivität werden durch das Umschreiben auch zusätzliche lokale Vergleichselemente aufgrund der durch Gleichheitsvergleichselemente implizierten Transitivität abgeleitet. Zum Beispiel stellt die folgende Abfrage eine Liste der Namen der Abteilungen (deren Abteilungsnummer größer als "E00" ist) und der Mitarbeiter, die in der entsprechenden Abteilung arbeiten, zusammen.

   SELECT EMPNO, LASTNAME, FIRSTNAME, DEPTNO, DEPTNAME
     FROM EMPLOYEE EMP,
          DEPARTMENT DEPT
    WHERE EMP.WORKDEPT = DEPT.DEPTNO
      AND DEPT.DEPTNO > 'E00'

Dieser Abfrage wird in der Phase des Umschreibens das folgende implizierte Vergleichselement hinzugefügt:

   EMP.WORKDEPT > 'E00'

Das Ergebnis dieses Umschreibens besteht darin, daß das Optimierungsprogramm die Anzahl der Zeilen, die verknüpft werden müssen, verringern kann.

Beispiel - Transformationen von OR zu IN

Nehmen Sie an, eine Klausel OR verknüpft zwei oder mehr einfache Gleichheitsvergleichselemente für dieselbe Spalte, wie im folgenden Beispiel:

     SELECT *
        FROM EMPLOYEE
    WHERE DEPTNO = 'D11'
       OR DEPTNO = 'D21'
       OR DEPTNO = 'E21'

Wenn es für die Spalte DEPTNO keinen Index gibt, erlaubt die Umwandlung der Klausel OR in das folgende Vergleichselement IN eine effektivere Verarbeitung der Abfrage:

     SELECT *
        FROM EMPLOYEE
    WHERE DEPTNO IN ('D11', 'D21', 'E21')
Anmerkung:In einigen Fällen wandelt der Datenbankmanager ein Prädikat IN in eine Gruppe von Klauseln OR um, so daß OR-Verknüpfungen für Indizes durchgeführt werden können. Weitere Informationen zu OR-Verknüpfungen von Indizes finden Sie in Zugriff über mehrere Indizes.


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]