Teil 2: MySQL 4 - Optimierung der Indizes in Abfragen

SQL-Optimierung: Indexnutzung in Queries manuell steuern

Verwenden Sie am Anfang eines LIKE-Musters keine Platzhalter

Es kommt vor, dass mithilfe einer WHERE-Klausel in der folgenden Form nach Zeichen gesucht wird:

WHERE col_name LIKE ‘%string%’

Das ist richtig, wenn Sie string finden wollen, egal wo es in der Spalte auftritt. Aber schreiben Sie nicht einfach aus Gewohnheit ein % an den Anfang und das Ende der Zeichenkette. Wenn Sie die Zeichenkette nur dort finden wollen, wo sie am Anfang der Spalte auftritt, lassen Sie das erste % weg. Wenn Sie beispielsweise in einer Spalte mit Nachnamen solche Namen suchen, die mit »Mac« beginnen, schreiben Sie die WHERE-Klausel wie folgt:

WHERE last_name LIKE ‘Mac%’

Die Anfrageoptimierung sucht nach dem konkreten Anfangsteil des Musters und nutzt den Index, um übereinstimmende Zeilen so zu finden, als ob Sie den folgenden Ausdruck geschrieben hätten – eine Formulierung, die erlaubt, dass ein Index für last_name genutzt wird:

WHERE last_name >= ‘Mac’ AND last_name < ‘Mad’

Diese Optimierung erfolgt nicht für Mustervergleiche, die den REGEXP-Operator verwenden.

Helfen Sie der Optimierung, die Indexeffizienz besser einschätzen zu können

Wenn Sie Werte in indizierten Spalten mit einer Konstanten vergleichen, setzt die Optimierung standardmäßig voraus, dass die Schlüsselwerte gleichmäßig im Index verteilt sind. Außerdem wertet sie den Index schnell aus, um abzuschätzen, wie viele Einträge verwendet werden, und so festzustellen, ob der Index für Konstantenvergleiche genutzt werden sollte. Bei BDB- und MyISAM-Tabellen können Sie den Server anweisen, eine Analyse der Schlüsselwerte durchzuführen, indem Sie die Anweisung ANALYZE TABLE absetzen. Auf diese Weise versorgen Sie die Anfrageoptimierung mit besseren Informationen. Bei MyISAM-Tabellen können Sie auch die Dienstprogramme myisamchk oder isamchk mit der Option --analyze ausführen. Diese Dienstprogramme wirken direkt auf die Tabellendateien, weswegen zwei Bedingungen erfüllt sein müssen, um sie nutzen zu können:

  • Sie müssen über ein Konto auf dem MySQL-Serverhost verfügen, das Ihnen Schreibzugriff auf die Tabellendateien gewährt.

  • Sie müssen mit dem Server hinsichtlich des Zugriffs auf die Tabellendateien kooperieren, damit er nicht auf die Tabelle zugreift, während Sie mit den entsprechenden Dateien hantieren. Verwenden Sie für den Schreibzugriff ein geeignetes Protokoll.