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.