Die Analyse der EXPLAIN-Daten kann Ihnen auf verschiedene Arten dabei helfen, Ihre Abfragen und Ihre Umgebung zu optimieren. Beispiele:
Wie im Abschnitt Auswirkung des Indexierens auf die Abfrageoptimierung erläutert, kann durch die Verwendung der geeigneten Indizes eine erhebliche Leistungssteigerung erzielt werden. Anhand der EXPLAIN-Ausgabe können Sie ermitteln, ob die von Ihnen für eine bestimmte Gruppe von Abfragen erstellten Indizes tatsächlich verwendet werden. In der EXPLAIN-Ausgabe sollten Sie folgende Bereiche auf die Verwendung von Indizes hin überprüfen:
Sie können die EXPLAIN-Einrichtung auch verwenden, um zu ermitteln, ob ein anderer Index anstelle des vorhandenen Index oder kein Index verwendet werden kann. Nach Erstellen eines neuen Index sollten Sie Statistikdaten für den betreffenden Index sammeln (mit dem Befehl RUNSTATS) und Ihre Abfrage erneut kompilieren. Mit der Zeit werden Sie möglicherweise durch die EXPLAIN-Daten feststellen, daß anstelle einer Indexsuche eine Tabellensuche verwendet wird. Dies kann sich aus einer Änderung in der Clusterbildung der Tabellendaten ergeben. Wenn der zuvor verwendete Index nun ein niedriges Clusterverhältnis aufweist, sollten Sie folgende Maßnahmen in Erwägung ziehen:
Sie können die EXPLAIN-Ausgabe analysieren und nach Arten des Zugriffs auf die Daten durchsuchen, die normalerweise für den verwendeten Anwendungstyp nicht optimal sind. Beispiele:
In OLTP-Anwendungen werden häufig Indexsuchen mit Vergleichselementen durchgeführt, die eine Bereichsbegrenzung vornehmen, weil diese Anwendungen in der Regel nur wenige Zeilen zurückgeben, die den mit einem Gleichheitsvergleichselement für eine Schlüsselspalte angegebenen Kriterien entsprechen. Wenn Ihre OLTP-Abfragen eine Tabellensuche verwenden, können Sie die EXPLAIN-Daten analysieren, um herauszufinden, warum keine Indexsuche verwendet wurde.
Die Suchkriterien für eine Abfrage, bei der Daten nur angezeigt werden, können sehr vage sein, was bewirkt, daß eine große Menge von Zeilen den Kriterien entspricht. Wenn der Benutzer sich normalerweise nur einige Seiten der Ausgabedaten anzeigen läßt, können Sie dafür sorgen, daß nicht die gesamte Antwortmenge errechnet werden muß, bevor einige Ergebnisse übergeben werden. In diesem Fall unterscheiden sich die Ziele des Benutzers vom grundlegenden Verarbeitungsprinzip des Optimierungsprogramms, das versucht, den Ressourcenbedarf für die gesamte Abfrage und nicht nur für die ersten wenigen Anzeigen mit Daten zu minimieren.
Wenn z. B. die EXPLAIN-Ausgabe zeigt, daß Operatoren sowohl für Mischverknüpfungen als auch für Sortierungen im Zugriffsplan verwendet wurden, wird die gesamte Antwortmenge in einer temporären Tabelle gespeichert, bevor Zeilen an die Anwendung zurückgegeben werden. In diesem Fall können Sie versuchen, den Zugriffsplan durch die Verwendung der Klausel OPTIMIZE FOR in der SELECT-Anweisung zu ändern. (Weitere Informationen zur Klausel OPTIMIZE FOR finden Sie in Klausel OPTIMIZE FOR n ROWS.) Auf diese Weise kann das Optimierungsprogramm versuchen, einen Zugriffsplan auszuwählen, der nicht die gesamte Antwortmenge in einer temporären Tabelle erstellt, bevor die ersten Zeilen an die Anwendung zurückgegeben werden.
Wenn bei einer Abfrage zwei Tabellen verknüpft werden, können Sie die Art der verwendeten Verknüpfungsverarbeitung überprüfen. Verknüpfungen mit relativ vielen Zeilen, wie sie z. B. bei Abfragen von Entscheidungshilfedaten auftreten, werden in der Regel schneller als Mischverknüpfungen (Merge Joins) ausgeführt. Verknüpfungen, die nur einige wenige Zeilen betreffen, wie z. B. für OLTP-Abfragen, sind hingegen als Verknüpfungen über Verschachtelungsschleife (Nested Loop Join) effizienter. In beiden Fällen kann es jedoch auch Umstände geben, wie beispielsweise die Verwendung lokaler Vergleichselemente oder Indizes, die die normale Verarbeitung dieser Verknüpfungen ändern. (Informationen über die Funktionsweise dieser beiden Verknüpfungsmethoden finden Sie in den Abschnitten Verknüpfung über Verschachtelungsschleife und Mischverknüpfung).