SQL-Analyse und Optimierung
Autor: Vilma Plum
eingetragen: Donnerstag, 06. August 2009 um 12:42 Uhr (32/2009 Kalenderwoche)
geändert: Donnerstag, 06. August 2009 um 12:42 Uhr (32/2009 Kalenderwoche)
Kategorien: DB: MySQL, DB: PostgreSQL, DB: Oracle, DB: MariaDB,
Text:
In SQL besteht die Möglichkeit, sich die Verarbeitungsschritte der SQL-Engine (jeder DB-Typ) anzeigen zu lassen, indem man vor das eigentliche SELECT-Statement das Keyword EXPLAIN einfügt. Die Engine analysiert nun die Anfrage und zeigt als Ergebnis des SELECTS die Verarbeitungsschritte an ohne die Anfrage auszuführen.
Ist in der Ausgabe nun z.B. eine Tabelle genannt, auf die mit einer Einschränkung auf einen Fremdschlüssel nur bestimmte Datensätze zurückgeliefert werden sollen, die EXPLAIN-Ausgabe zeigt aber an, dass alle Datensätze durchsucht werden, so läßt dies auf einen fehlenden INDEX auf die Spalte des Fremdschlüsses schließen.
Hier reicht es meist, die Anfrage mit erstellen dieses Indexes zu beschleunigen, wie sowieso jeder Spalte mit Fremdschlüssel, die mit Zahlen in einer WHERE Bedingung eingeschränkt werden, zu indizieren.
In Kreuztabellen, die keinen zusammengesetzten Primärschlüssel verwenden, kann auch mit PHPMyAdmin ein Index über zwei Spalten erzeugt werden. Die Verwendung von UNIQUE erzeugt nicht automatisch einen INDEX.
Quellcode:
SELECT * FROM Tabelle t WHERE t.fk_id = 3; EXPLAIN SELECT * FROM Tabelle t WHERE t.fk_id = 3;