Teil 1: MySQL4 - Optimierung von Anfragen

SQL-Optimierung: Indizes richtig einsetzen

Berücksichtigen Sie, welche Vergleiche für die Spalten vorgenommen werden

Indizes werden für die Operationen <, <=, =, >=, > und BETWEEN verwendet. Außerdem werden sie in LIKE-Operationen eingesetzt, wenn das Muster ein literales Präfix aufweist. Wenn Sie eine Spalte nur für andere Operationen verwenden (z.B. STRCMP()), dann ist es nicht sinnvoll, einen Index dafür anzulegen. Bei HEAP-Tabellen werden die Indizes in Hashs unterteilt und nur für Gleichheitsüberprüfungen benutzt; wenn Sie bei einer HEAPTabelle eine Bereichssuche durchführen (beispielsweise a < b), dann hilft Ihnen ein Index dabei nicht weiter.

Verwenden Sie das Slow-Query-Log, um Leistungseinbußen durch langsame Anfragen zu ermitteln

Mithilfe dieser Logdatei können Sie Anfragen ermitteln, die von einer Indizierung profitieren könnten. Sie können sich die Logdatei mit dem Dienstprogramm mysqldumpslow anzeigen lassen. Erscheint eine bestimmte Anfrage immer wieder in der Logdatei für langsame Anfragen, dann ist die Wahrscheinlichkeit hoch, dass diese Anfrage nicht optimal formuliert ist; vielleicht können Sie sie so optimieren, dass die Ausführung schneller erfolgt. Beachten Sie bei der Einschätzung Ihrer Logdatei für langsame Anfragen die folgenden Aspekte:

  • »Langsam« wird in Echtzeit gemessen. Wenn Ihr Server also stark belastet wird, erscheinen mehr Anfragen in dieser Logdatei, als wenn er nicht viel zu tun hat. Dies ist unbedingt zu berücksichtigen.

  • Wenn Sie zusätzlich zur Aktivierung der Protokollierung langsamer Anfragen die Option --log-long-format verwenden, wird die Logdatei auch solche Anfragen enthalten, die ohne Verwendung eines Index ausgeführt werden. Diese Anfragen müssen aber nicht unbedingt langsam sein (beispielsweise wird für kleine Tabellen kein Index benötigt).