Eine kurze Diskussion zur MySQL-Select-Optimierungslösung

Eine kurze Diskussion zur MySQL-Select-Optimierungslösung

Beispiele aus dem wirklichen Leben

Haben wir festgestellt, dass viele Abfrageanweisungen im Unternehmen „select * xxxx“ lauten?

Die Idee dahinter ist wohl, dass andere „select *“ geschrieben haben, also werde ich es auch schreiben und mir so eine Menge Ärger ersparen.

Langsame Abfrage

  • Überlegen Sie zunächst, ob bei der von uns verwendeten Datenbankabfrageanweisung zu viele Daten abgerufen werden.
  • Tatsächlich können die meisten Abfragen mit geringer Leistung oft durch eine Reduzierung der abgerufenen Datenmenge optimiert werden.
  • Denn select * führt zu zusätzlichem I/O, Speicher- und CPU-Verbrauch auf dem Server

Drei Indikatoren für langsamen Abfrage-Overhead in der Datenbank

  • Entsprechende Zeit
  • Anzahl der gescannten Zeilen
  • Anzahl der zurückgegebenen Zeilen

Wenn Sie zum Index gehen

wähle * von stu, wobei ID = 1;

Der Index optimiert die Abfrage und gibt nur zehn Daten zurück. Wenn kein ID-Index vorhanden ist, wird geschätzt, dass auf Hunderte oder Tausende von Datenzeilen zugegriffen wird.

Tipps: Verwenden Sie den Befehl EXPLAIN in MySQL, um die Anzahl der Zeilen anzuzeigen, die den Zeilen entsprechen

Tatsächlich ist es am besten, nicht übereinstimmende Datensätze auf Speichermodulebene über „where“ herauszufiltern. Die zweitbeste Situation besteht darin, den Indextrefferscan abzudecken und nicht übereinstimmende Datensätze auf Serverebene über „where“ herauszufiltern, ohne zur Abfrage zur Tabelle zurückzukehren. Die beste Situation besteht darin, Daten aus der Datentabelle zurückzugeben und dann Datensätze herauszufiltern, die die Bedingungen nicht erfüllen.

So optimieren Sie

Verwenden Sie die Indexabdeckung, um alle benötigten Spalten in den Index aufzunehmen, sodass wir nicht zur Abfrage in die Tabelle zurückkehren müssen und die Tabelle trennen können

3. Refaktorisieren Sie die Abfrage (Sie können eine große Abfrage in kleinere aufteilen)

Zum Beispiel: count, limit, max()

zählen

Die beste Optimierung für „count“ besteht im Hinzufügen einer Übersichtstabelle, da „count“ zwangsläufig eine große Anzahl von Zeilen scannen muss.

Limit

Beim Paging kommt es häufig zu Einschränkungen, wie im folgenden Code gezeigt.

Wähle die ID aus der Stu-Sortierung nach ID-Limit 1000,20;

Diese Anweisung fragt 1020 Daten ab, verwirft dann die ersten 1000 und gibt die 20 Daten von 1000 bis 1020 zurück. Die beste Möglichkeit zur Optimierung besteht in der Verwendung des Index, sodass die Grenzabfrage in eine Abfrage mit bekannter Position umgewandelt werden kann.

Maximalwert und Minimalwert Min&Max

Stellen wir uns zunächst vor, dass wir bei Verwendung des Primärschlüsselindexes den ersten Wert bei der Abfrage als den Mindestwert verwenden, den wir zurückgeben möchten. Wir können auch den Primärschlüsselindex verwenden und die Datenmenge mit „limit“ steuern, um den Effekt der min()-Funktion zu erzielen und min zu ersetzen.

ID auswählen 
von stu 
Verwenden Sie den Index (primay), wobei Adresse = „bj“, Grenze 1;

Dadurch werden so wenige Datensätze wie möglich gescannt.

Zum Abschluss noch zwei Fragen zur Entspannung.

Finden Sie das zweithöchste Gehalt in der Tabelle „Mitarbeiter“ (Gehalt)
+----+--------+
| ID | Gehalt |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
Ergebnisse +---------------------+
| Zweithöchstes Gehalt |
+---------------------+
| 200 |
+---------------------+
Antwort: select max(Gehalt) ZweithöchstesGehalt
vom Mitarbeiter 
wobei Gehalt < (max(Gehalt) auswählen)
vom Mitarbeiter)
Suchen Sie in der Tabelle „Person“ nach allen doppelten E-Mail-Adressen.
+----+---------+
| ID | E-Mail |
+----+---------+
| 1 | [email protected] |
| 2 | [email protected] |
| 3 | [email protected] |
+----+---------+

Ergebnisse+---------+
| E-Mail |
+---------+
| [email protected] |
+---------+

Antwort: Wählen Sie „E-Mail von Person“ 
Gruppieren nach E-Mail 
mit Anzahl (E-Mail) >= 2;

Dies ist das Ende dieses Artikels über MySQL-Select-Optimierungslösungen. Weitere relevante Inhalte zur MySQL-Select-Optimierung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • MySQL-Optimierungslösung: Aktivieren Sie das Protokoll für langsame Abfragen
  • MySQL-Abfrageoptimierung: Eine Tabellenoptimierungslösung für 1 Million Daten
  • Gründe und Optimierungslösungen für langsames MySQL-Limit-Paging mit großen Offsets
  • Eine kurze Diskussion über die MySQL-Optimierungslösung für große Tabellen
  • MySQL-Lösung zur funktionalen Indexoptimierung
  • Referenz zur MySQL-Optimierungslösung
  • Mehrere gängige Optimierungslösungen für MySQL

<<:  Zusammenfassung und Analyse häufig verwendeter Docker-Befehle und Beispiele

>>:  CSS-Stil zum Zentrieren des HTML-Tags im Browser

Artikel empfehlen

Grundlegendes Einführungstutorial zu MySQL-Partitionstabellen

Vorwort In einem aktuellen Projekt mussten wir ei...

Detaillierte Erläuterung der allgemeinen Schritte zur SQL-Anweisungsoptimierung

Vorwort In diesem Artikel erfahren Sie hauptsächl...

So verwenden Sie Linux-Befehle in IDEA

Im Vergleich zum Windows-System bietet das Linux-...

Iframe-Parameter mit Anweisungen und Beispielen

<iframe src=”test.jsp” Breite=”100″ Höhe=”50″ ...

Schritte zur Installation von GRUB auf einem Linux-Server

So installieren Sie GRUB für Linux Server Sie kön...

Lösung für das Versagen von Docker beim Freigeben von Ports

Heute bin ich auf eine sehr seltsame Situation ge...

So verwalten Sie zwischengespeicherte Seiten in Vue

Inhaltsverzeichnis Problem 1: Zerstörung 1. Wie m...

Kodierungsprobleme und -lösungen, wenn MySQL zwei Tabellen verknüpft

Wenn Mysql zwei Tabellen verknüpft, wird eine Feh...