Heim  >  Artikel  >  Datenbank  >  Welche Methoden gibt es, um die Effizienz von MySQL-Abfragen und die Optimierung der Abfragegeschwindigkeit zu verbessern?

Welche Methoden gibt es, um die Effizienz von MySQL-Abfragen und die Optimierung der Abfragegeschwindigkeit zu verbessern?

WBOY
WBOYnach vorne
2023-06-03 15:20:221976Durchsuche

1. Verwenden Sie das Schlüsselwort EXPLAIN, um Fehler in der Abfrageanweisung auszuwerten

Der Autor hat eine einfache Select-Abfrageanweisung in der Datenbank ausgeführt, um alle Informationen in einer Tabelle zu erhalten, wie in der Abbildung gezeigt unten anzeigen. Nun möchte der Datenbankadministrator wissen, welche Arbeit die Datenbank bei der Ausführung dieser Anweisung geleistet hat, bzw. ob es eine Möglichkeit zur weiteren Optimierung dieser Abfrageanweisung gibt. Wenn Sie diese Informationen wissen möchten, können Sie der Abfrageanweisung ein Explain-Schlüsselwort hinzufügen.

Welche Methoden gibt es, um die Effizienz von MySQL-Abfragen und die Optimierung der Abfragegeschwindigkeit zu verbessern?

Die Daten in einer Tabelle können über die Select-Abfrageanweisung aus der Datenbank abgefragt werden. Aus dieser einfachen Abfrageanweisung lassen sich keine Ausführungseffizienz und Optimierungsmöglichkeiten ableiten. Um detailliertere Informationen zu verstehen, müssen Sie das Schlüsselwort Explain hinzufügen. Wie in der folgenden Abbildung dargestellt:

Welche Methoden gibt es, um die Effizienz von MySQL-Abfragen und die Optimierung der Abfragegeschwindigkeit zu verbessern?

Nach dem Hinzufügen des Explain-Schlüsselworts hat das System die Daten in der Tabelle nicht abgefragt, sondern nur einige davon angezeigt Daten während des Abfragevorgangs. Diese Informationen sind für unsere spätere Datenbankabfrageoptimierung sehr hilfreich. Anhand der obigen Informationen können wir erkennen, dass der Benutzer gerade eine einfache Anfrage gestellt hat. In dieser Abfrage werden keine Indizes, Schlüsselwörter oder Where-Anweisungen verwendet. Aus diesem Grund ist diese Abfrageanweisung nicht sehr sinnvoll. Obwohl es das endgültige richtige Ergebnis finden kann, ist seine Abfrageeffizienz möglicherweise nicht sehr offensichtlich. Zu diesem Zweck können Datenbankexperten Optimierungen auf Basis der oben dargestellten Informationen durchführen. Was wäre das Ergebnis, wenn wir unserer Abfrage jetzt eine WHERE-Anweisung hinzufügen würden, wie im folgenden Bild gezeigt?

Welche Methoden gibt es, um die Effizienz von MySQL-Abfragen und die Optimierung der Abfragegeschwindigkeit zu verbessern?

Wenn die Where-Anweisung im letzten Extra-Feld verwendet wird, zeigt das System an, dass sie verwendet wurde. Während der Datenbankoptimierung müssen wir NULL-Felder oder Felder mit leerem Inhalt in den Ergebnissen erfassen. Diese Orte stehen oft im Fokus unserer Optimierung. Sie können diese Select-Anweisung optimieren und die Abfrageeffizienz verbessern, indem Sie Schlüsselwörter oder Indizes in der Tabelle festlegen, wie in der Abbildung dargestellt.

2. Verwenden Sie beim Vergleichen von Daten Spalten desselben Typs, um die Abfrageeffizienz zu verbessern.

Beim Abfragen von Daten werden der Bedingungsanweisung manchmal Beurteilungsbedingungen hinzugefügt. Es gibt jetzt zwei Tabellen: die Tabelle mit den grundlegenden Benutzerinformationen und die Tabelle mit den Benutzerberechtigungen, die nach Benutzernummer verknüpft sind. Um die Berechtigungsinformationen jedes Benutzers abzufragen, müssen Sie die Benutzernummer als Abfragebedingung verwenden. Nehmen Sie nun an, dass das Benutzernummernfeld in der Benutzerbasisinformationstabelle vom Typ CHAR und das Benutzernummernfeld in der Benutzerberechtigungstabelle vom Typ VARCHAR ist. Obwohl diese beiden Datentypen beide Zeichentypen sind, sind sie nicht vom gleichen Typ. Führen Sie nun eine Korrelationsabfrage für diese beiden Tabellen durch. Zunächst muss festgestellt werden, dass es sich um unterschiedliche Arten von Zeichendaten handelt. Sie können am Ende immer noch das richtige Ergebnis erhalten. Nachdem wir diesen Punkt geklärt haben, überlegen wir, ob diese Abfrageanweisung optimiert werden kann

Machen wir eine andere Annahme. Nun ist der Datentyp der Benutzernummer in beiden Tabellen CHAR. Führen Sie nun eine verwandte Abfrage für diese beiden Tabellen durch. Das Ergebnis unseres Tests ist, dass die Abfrageergebnisse gleich sind, aber der Zeitaufwand unterschiedlich ist. Und mit zunehmender Datenmenge wird der Zeitunterschied zwischen den beiden Abfragen immer größer. Von hier aus können wir erkennen, dass die beiden Abfrageanweisungen zwar gleichwertig sind, ihre Abfrageeffizienz jedoch unterschiedlich ist.

Obwohl Datentypen in der MySQL-Datenbank miteinander kompatibel sind, können dennoch Vergleiche durchgeführt werden. Die Effizienz der Abfrage wird jedoch beeinträchtigt. Um die Effizienz der Datenbankabfrage zu verbessern, empfiehlt der Autor, Spalten desselben Typs in der Abfragebedingungsanweisung am besten zu vergleichen. Unter den gleichen Bedingungen kann derselbe Spaltentyp eine bessere Leistung bieten als Spalten unterschiedlichen Typs. Dies ist besonders wichtig bei Datenbanken mit großen Datenmengen.

Diese Optimierung muss jedoch den Spaltentyp der Datentabelle berücksichtigen. Aus diesem Grund müssen Sie dies beim Entwerfen der Datentabelle berücksichtigen. Für den obigen Fall können wir diesen beiden Tabellen gezielt eine Benutzer-ID-Spalte hinzufügen. Sie können eine Folge ganzzahliger Typen verwenden, um dem System eine automatische Nummerierung zu ermöglichen. Vergleichen Sie dann bei der Abfrage diese Benutzer-ID-Spalte und nicht die ursprüngliche Benutzernummernspalte. Relativ gesehen wird die Effizienz des Abfragevorgangs höher sein.

3. Verwenden Sie Platzhalter am Anfang des Like-Schlüsselworts mit Vorsicht.

Bei der tatsächlichen Arbeit stellte der Autor fest, dass viele Datenbankadministratoren eine schlechte Angewohnheit haben. Wenn sie Schlüsselwörter wie „Gefällt mir“ verwenden, verwenden sie nach dem Zufallsprinzip Platzhalter. Beispielsweise muss der Benutzer nun alle Produktinformationen mit dem Präfix „LOOK“ finden. Bei Abfragen sind Benutzer normalerweise daran gewöhnt, Anweisungen wie die folgenden zu verwenden: use like „%LOOK%“. Diese bedingte Anweisung ruft alle Datensätze ab, die das Wort LOOK im Produktnamen enthalten, anstatt nur Produktinformationen mit dem Präfix LOOK abzurufen.

Obwohl das Endergebnis dasselbe sein kann. Die Abfrageeffizienz der beiden ist jedoch unterschiedlich. Tatsächlich wird ein großer Teil davon durch unsachgemäßes Design von Clientanwendungen verursacht. Beim Entwerfen von Clientanwendungen zeigt das System beispielsweise standardmäßig ein %-Symbol an. Wie unten gezeigt.

Welche Methoden gibt es, um die Effizienz von MySQL-Abfragen und die Optimierung der Abfragegeschwindigkeit zu verbessern?

Die Absicht dieses Designs ist gut, damit das System Fuzzy-Abfragen unterstützen kann. Im tatsächlichen Betrieb können jedoch Probleme auftreten. Wenn der Benutzer bei der Abfrage nicht das Wort LOOK vor % eingibt, sondern das Wort nach %. Denn bei der Abfrage wird der Cursor automatisch hinter dem %-Zeichen positioniert. Normalerweise passen Benutzer die Cursorposition beim Tippen nicht an. Zu diesem Zeitpunkt trat die oben erwähnte Situation ein.

Um unerwartete Situationen zu vermeiden, empfiehlt der Autor dringend, bei der Verwendung von Schlüsselwörtern wie „Gefällt mir“ gefolgt von Platzhaltern sehr vorsichtig zu sein. Insbesondere bei der Suche nach Datensätzen aus einer großen Datenmenge muss die Position dieses Platzhalters an der richtigen Stelle verwendet werden. Wenn Sie zu Beginn verschiedene Platzhalter verwenden können, versuchen Sie, keine Platzhalter zu verwenden.

4. Versuchen Sie, das Schlüsselwort „Gefällt mir“ durch andere Formen zu ersetzen. Wie oben erwähnt, müssen Sie bei der Verwendung des Schlüsselworts „Gefällt mir“ auf die Position des Platzhalters achten. Im Hinblick auf die Effizienz der Abfrage müssen wir auf die Position von Platzhaltern achten und die Verwendung des Schlüsselworts „Gefällt mir“ so weit wie möglich vermeiden. Tatsächlich können in SQL-Anweisungen andere Methoden verwendet werden, um das Like-Schlüsselwort zu ersetzen. Beispielsweise gibt es eine Produkttabelle mit einer 6-stelligen Nummer. Jetzt müssen wir die Produktnummer abfragen, beginnend mit 9. So geht's

Zunächst können Sie das Schlüsselwort „Gefällt mir“ verwenden, z. B. „9 %“. Beachten Sie die Position dieses Platzhalters. Diese bedingte Anweisung kann die erforderlichen Ergebnisse finden. Aus Sicht der Leistungsoptimierung ist diese Aussage jedoch kein guter Weg, damit umzugehen. Dies können wir auch durch einige Kompromisse erreichen.

Das zweite wird durch den Vergleich von Symbolen erreicht. Dieser Satz kann wie folgt umformuliert werden: Dies kann durch die Verwendung einer Methode mit einem Wert zwischen 900000 und 999999 erreicht werden. Obwohl die Ergebnisse beider Abfragen gleich sind. Allerdings ist die Abfragezeit dieser Anweisung viel kürzer als bei der obigen Anweisung mit dem Like-Symbol.

Das obige ist der detaillierte Inhalt vonWelche Methoden gibt es, um die Effizienz von MySQL-Abfragen und die Optimierung der Abfragegeschwindigkeit zu verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen