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

Zwei Implementierungen des Front-End-Routings von Vue-Router

Inhaltsverzeichnis Modusparameter HashHistorie Ha...

MySQL-Daemon konnte nicht gestartet werden – Fehlerlösung

MySQL-Daemon konnte nicht gestartet werden – Fehl...

Beispiel für die Konfiguration der domänenübergreifenden Fehlerbehebung in nginx

Die domänenübergreifende Nginx-Konfiguration wird...

Java-Beispielcode zum Generieren von zufälligen Zeichen

Beispielcode: importiere java.util.Random; import...

Lösungen für ungültige Nullsegmentbeurteilungen und IFNULL()-Fehler in MySql

MySql Nullfeldbeurteilung und IFNULL-Fehlerverarb...

React-Internationalisierung – Verwendung von react-intl

Wie erreicht man Internationalisierung in React? ...

So kapseln Sie Axios einfach in Vue

Axios in Vue einfügen importiere Axios von „Axios...

Der vollständige Implementierungsprozess von Sudoku mit JavaScript

Inhaltsverzeichnis Vorwort So lösen Sie Sudoku Fü...

Implementierung von JavaScript zum Herunterladen und Hochladen verknüpfter Bilder

Da wir Bilder hochladen möchten, müssen wir zunäc...

Beispiele für dl-, dt- und dd-Listenbezeichnungen

Die Tags dd und dt werden für Listen verwendet. N...

JS Cross-Domain-Lösung React-Konfiguration Reverse-Proxy

Domänenübergreifende Lösungen jsonp (get simulier...

Karusselleffekte mit JavaScript implementieren

In diesem Artikel wird der spezifische Code für J...