Heim  >  Artikel  >  Datenbank  >  Vertiefendes Verständnis des erweiterten MySQL-Driftings (6)

Vertiefendes Verständnis des erweiterten MySQL-Driftings (6)

黄舟
黄舟Original
2017-03-08 13:57:521147Durchsuche

Leistungsoptimierung

Index

Der Index verweist auf eine Stelle in der Datenbank, an der sich die spezifischen Daten befinden auf der Spalte, um die Informationen in dieser Spalte anzuordnen. Wenn der Server für eine Abfrage auf diese Informationen zugreifen muss, weiß er, wo er suchen muss, da der Index auf den entsprechenden Speicherort verweist.

Wenn eine Spalte Abfragen, Gruppierungen und Sortierungen umfasst, verbessert der Index die Leistung.
Indizes mit vielen doppelten Werten führen nicht zu guten Ergebnissen.
Sie können Tabellen verwenden, um mehrere nicht eindeutige Indizes zu verknüpfen, um die Leistung zu verbessern.
Je mehr Indizes, desto besser ist nicht unbedingt die Leistung. Das Hinzufügen eines Index verbessert nicht unbedingt die Leistung.

Abfrage-Cache

Beim Ausführen einer Auswahlabfrage zeichnet MySQL4.x die Abfrage auf und gibt Ergebnisse zurück. Dies wird erreicht, indem die Ergebnismenge bei jeder Auswahlabfrage in einem speziellen Cache gespeichert wird. Wenn der Server dann aufgefordert wird, dieselbe Abfrage erneut durchzuführen, ruft MySQL die Ergebnisse aus dem Cache ab, anstatt die Abfrage erneut auszuführen. Diese Funktion ist standardmäßig aktiviert.

Beachten Sie, dass zwischengespeicherte Abfragen, die diese Tabelle verwenden, ungültig werden und aus dem Cache entfernt werden, sobald sich eine Tabelle ändert. Dadurch wird verhindert, dass Abfragen ungenaue Daten aus der alten Tabelle zurückgeben. Tabellen, die sich häufig ändern, profitieren nicht vom Caching. In diesem Fall können Sie erwägen, den Cache nicht zu verwenden, und die Option sql_no_cache hinzufügen, um dies zu erreichen.

Abfrageanalyse

Fügen Sie am Anfang der Auswahlabfrage ein Schlüsselwort „explain“ hinzu, das MySQL anweist, ein Diagramm zurückzugeben, das angibt, dass, wenn diese Abfrage verarbeitet wird, dieses Diagramm angibt, welche Abfrage auf Informationen zugreift über die Tabelle und die Anzahl der Zeilen, die die Abfrage voraussichtlich zurückgeben wird. Diese Informationen können verwendet werden, um zu sehen, welche Tabellen indiziert werden können, um die Ausführung zu beschleunigen und um zu analysieren, wo Engpässe bestehen.

Anhand der Ergebnisse der Abfrageanzeige können Sie erkennen, wo Sie Indizes hinzufügen und schnelle Korrekturen vornehmen können.

Mehrtabellenabfragen optimieren

Eine Unterabfrage ist eine SELECT-Anweisung, die in einer anderen SELECT-Anweisung verschachtelt ist. Unterabfragen werden häufig verwendet, um eine komplexe Abfrage in eine Reihe logischer Schritte zu unterteilen oder um die Ergebnisse anderer Abfragen zur Beantwortung einer Abfrage zu verwenden. Das Ergebnis ist, dass anstelle der Ausführung von zwei oder mehr separaten Abfragen eine einfache Abfrage ausgeführt werden kann, die eine oder mehrere Unterabfragen enthält.

MySQL kann Joins besser optimieren als Unterabfragen. Wenn Sie also feststellen, dass die durchschnittliche Auslastung Ihres MySQL-Servers unannehmbar hohe Werte erreicht hat, sollten Sie Ihren Anwendungscode überprüfen und versuchen, ihn als Unterabfragen für Joins und Join-Sequenzen umzuschreiben.

Sie können ineffiziente Unterabfragen in effizientere Verknüpfungen umwandeln, indem Sie die Erfassungsfunktionen von MySQL effektiv nutzen und Verfahren ändern.
Sie können auch sitzungsbasierte Servervariablen verwenden, wenn Sie die Verwendung verschachtelter Abfragen in der Mitte vermeiden möchten.

Verwendung temporärer Tabellen

MySQL ermöglicht auch die Erstellung temporärer Tabellen mit dem Befehl „create temporary table“. Diese Art von Tabelle wird so genannt, weil sie nur für eine einzige MySQL-Sitzung existiert. Wenn der Client, der diese Tabellen verwendet, die Verbindung zum MySQL-Server schließt, wird sie automatisch gelöscht.

Da temporäre Tabellen im Speicher gehalten werden, sind sie deutlich schneller als festplattenbasierte Tabellen. Ergebnisse können effektiv als Zwischenspeicherbereich verwendet werden, um die Geschwindigkeit der Abfrageausführung zu erhöhen, komplexe Abfragen in einfachere Komponenten aufzuteilen oder als Ersatz für Unterabfragen und Join-Unterstützung.

Tabellendesign optimieren

Um die Abfrage zu verfeinern, müssen einige Faktoren beim Tabellendesign berücksichtigt werden. Wenn die Tabelle, die häufig abgefragt wird, viele Änderungen erfährt, besteht die Möglichkeit zur Verbesserung der Leistung zunächst darin, Felder mit fester Länge anstelle von Feldern mit variabler Länge zu verwenden. Obwohl die Verwendung von Feldern fester Länge mehr Speicherplatz verschwendet, verarbeitet MySQL Felder fester Länge aus Abfragesicht schneller als Felder variabler Länge.

Eine weitere Technik zur Verbesserung der Leistung besteht darin, den Befehl „Tabelle optimieren“ für Tabellen zu verwenden, die häufig geändert werden müssen. Häufiges Ändern der Tabelle kann zu einer Fragmentierung der Festplatte führen, sodass mehr Zeit für das Lesen ungenutzter Speicherplatzblöcke benötigt wird, um die gewünschten Daten zu erhalten.

Wenn Sie über eine Leistungsverbesserung nachdenken, prüfen Sie auch, ob Sie alle erstellten Tabellen als Ziel verwenden müssen. Zusätzliche Tabellen bedeuten eine verringerte Leistung. Wenn keine Notwendigkeit besteht, die Tabellen zusammenzuführen, sollten Sie versuchen, die verbundenen Spalten abzugleichen.

Servereinstellungen anpassen

Wenn Sie möchten, dass der Server effizienter läuft, ist die beste Lösung, den Speicherplatz zu vergrößern und eine größere und schnellere Festplatte zu verwenden. Aber meistens lassen die Umstände dies nicht zu. An dieser Stelle benötigen wir einige allgemeine Techniken zur Verbesserung des Servers.

Passen Sie Servervariablen an. Die Variable key_buffer_size steuert die Menge an Speicher, die der MySQL-Indexpuffer verwenden kann. Je höher der Wert, desto mehr Speicher kann der Index nutzen und desto besser ist die Leistung. Im Allgemeinen wird dieser Wert bei 25 % bis 30 % des gesamten verfügbaren Speichers gehalten. Die Variable table_cache steuert die Menge an Speicher, die der Tabellencache verwenden kann, und die Gesamtzahl der Tabellenöffnungen, die MySQL gleichzeitig verarbeiten kann. Bei stark ausgelasteten Servern mit vielen Datenbanken und Tabellen sollte dieser Wert mit set erhöht und geändert werden.

Sobald eine globale Servervariable geändert wird, bleiben diese Variablen bestehen, bis der Server heruntergefahren wird. Nach dem Neustart des Servers kehren die Variablen jedoch in ihren Standardzustand zurück. Daher ist es besser, dauerhafte Änderungen vorzunehmen.


Das obige ist der detaillierte Inhalt vonVertiefendes Verständnis des erweiterten MySQL-Driftings (6). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn