Teil 1: MySQL4 - Optimierung von Anfragen
SQL-Optimierung: Indizes richtig einsetzen
Indizes auswählen
Ich setze voraus, dass Ihnen die Syntax zum Erstellen von idizes bekannt ist. Aber allein die Syntax hilft Ihnen nicht bei der Entscheidung, wie Ihre Tabellen indiziert werden sollen. Dazu müssen Sie überlegen, wie Ihre Tabellen genutzt werden. Dieser Abschnitt gibt Ihnen Anhaltspunkte dafür, wie Sie Spalten erkennen, die für die Indizierung geeignet sind, und wie Sie Ihre Indizes am besten erstellen:
Indizieren Sie Spalten zur Suche, Sortierung und Gruppierung von Daten, nicht jedoch Spalten zur Anzeige von Ausgaben
Mit anderen Worten: Die am besten für die Indizierung geeigneten Spalten sind diejenigen, die in Ihrer WHERE
-Klausel erscheinen, oder Spalten, die in JOIN
-, ORDER
BY
- und GROUP BY-
Klauseln angegeben werden. Ungeeignet sind Spalten, die in der Auswahlliste nach dem Schlüsselwort SELECT
aufgeführt werden:
SELECT
col_a ungeeignet
FROM
tbl1 LEFT JOIN tbl2
ON tbl1.col_b = tbl2.col_c geeignet
WHERE
col_d = expr; geeignet
Die Spalten, die Sie zur Anzeige auswählen, und diejenigen, die Sie in der WHERE
-Klausel angeben, können natürlich die gleichen sein. Wichtig ist, dass das Vorhandensein einer Spalte in der Ausgabespaltenliste kein relevanter Hinweis darauf ist, dass ein Index dafür angelegt werden sollte.
Spalten, die in Join-Klauseln oder Ausdrücken der Form col1 = col2
in WHERE
-Klauseln auftreten, sind außerordentlich gut für die Indizierung geeignet. col_b
und col_c
in der obigen Anfrage sind Beispiele dafür. Wenn MySQL eine Anfrage unter Verwendung von mit JOIN
verknüpften Spalten optimieren kann, reduziert es damit die möglichen Tabellen-/Zeilen-Kombinationen erheblich, weil Tabellen nicht mehr vollständig durchsucht werden.