VorwortWas ist eine langsame Abfrage und wie kann eine langsame Abfrage optimiert werden? Im Folgenden werden die relevanten Kenntnisse dieser beiden Wissenspunkte vorgestellt. Grundlagen langsamer Abfragen: Optimieren des DatenzugriffsWerden unnötige Daten aus der Datenbank abgefragt? Unnötige Datensätze abfragen: Lösung: Limit nach der Abfrage hinzufügen Alle Spalten zurückgeben, wenn mehrere Tabellen verknüpft sind: Lösung: Nur die benötigten Spalten nehmen Immer alle Spalten abrufen: select * Lösung: Es ist besser, Teilspalten abzurufen, es sei denn, die Anwendung speichert die Spaltendaten im Cache. Wiederholte Abfrage der gleichen Daten: Lösung: Bei Bedarf aus dem Cache holen Scannt MySQL zusätzliche Datensätze? Die Abfragekosten können anhand der Antwortzeit, der Anzahl der gescannten Zeilen und der Anzahl der zurückgegebenen Zeilen gemessen werden. Um die Anzahl der gescannten Zeilen zu reduzieren, können Sie Indizes verwenden, um die erforderlichen Datensätze abzudecken. Das Hinzufügen von Indizes bedeutet jedoch nicht, dass die Anzahl der gescannten Zeilen der Anzahl der zurückgegebenen Zeilen entsprechen kann, z. B. bei Aggregatfunktionen wie Summe und Anzahl. So strukturieren Sie eine Abfrage neuEine komplexe Abfrage oder mehrere einfache Abfragen In der Vergangenheit wurde stets Wert darauf gelegt, dass die Datenbankebene möglichst viel Arbeit übernimmt, da die Abfrageanalyse und -optimierung über die Netzwerkkommunikation ein kostspieliges Unterfangen war. Dieses Konzept lässt sich jedoch nicht auf MySQL anwenden, das auf einfaches Herstellen und Trennen von Verbindungen und effiziente Rückgabe kleiner Abfrageergebnisse ausgelegt ist. Moderne Netzwerke sind sowohl hinsichtlich der Bandbreite als auch der Latenz viel schneller als früher. Bei einigen MySQL-Versionen ist es sogar auf einem Allzweckserver möglich, über 100.000 Abfragen pro Sekunde auszuführen, und selbst eine Gigabit-Netzwerkkarte kann problemlos über 2.000 Abfragen pro Sekunde verarbeiten. Daher ist das Ausführen mehrerer kleiner Abfragen jetzt kein großes Problem mehr. Natürlich ist das Antworten auf die Daten an den Client im Vergleich zum internen Scannen zeitaufwändiger. Unter denselben Bedingungen ist es daher besser, so wenige Abfragen wie möglich zu verwenden. Abfrage teilen Wenn Sie SQL zum Abfragen verwenden, müssen Sie darauf achten, große Abfragen in kleine Abfragen aufzuteilen, um die Auswirkungen auf die Datenbank zu verringern. Wenn eine große Anweisung auf einmal abgeschlossen wird, kann dies viele Daten auf einmal sperren, das gesamte Transaktionsprotokoll füllen, Systemressourcen erschöpfen und andere Abfragen blockieren. Wenn wir beispielsweise Datenstatistiken erstellen, müssen wir die Informationen einer großen Anzahl von Bestellnummern abfragen. Sollten wir die IN-Abfrage auf einmal verwenden oder die Parameterliste kürzen und die Abfrage mehrmals durchführen? Die Antwort besteht darin, die Parameterliste zu kürzen und die Abfrage mehrmals durchzuführen. Denn wenn die IN-Parameter zu viele sind, denkt MySQL, dass der Index nicht mehr verwendet werden kann, und führt möglicherweise eine vollständige Tabellenabfrage durch. Wenn die Datenmenge in der Datentabelle zu diesem Zeitpunkt zu groß ist, kann dies zu einem Timeout der Abfrage führen. // zerlegt eine Liste in nicht sichtbare Unterlisten der Länge L statisch <T> Liste<Liste<T>> gehackt(Liste<T> Liste, endgültige int L) { Liste<Liste<T>> Teile = neue ArrayList<Liste<T>>(); endgültige int N = Liste.Größe(); für (int i = 0; i < N; i += L) { Teile.Hinzufügen(neue ArrayList<T>( Liste.Unterliste(i, Math.min(N, i + L))) ); } Rücksendeteile; } Liste<Integer> Zahlen = Sammlungen.unmodifiableList( Arrays.alsList(5,3,1,2,9,5,0,7) ); Liste<Liste<Ganzzahl>> Teile = gehackt(Zahlen, 3); System.out.println(Teile); // druckt "[[5, 3, 1], [2, 9, 5], [0, 7]]" teile.get(0).add(-1); System.out.println(Teile); // druckt "[[5, 3, 1, -1], [2, 9, 5], [0, 7]]" System.out.println(Zahlen); // druckt "[5, 3, 1, 2, 9, 5, 0, 7]" (unverändert!) Kürzen Sie die Liste programmgesteuert, sodass die Abfrage den Index statt eines vollständigen Tabellenscans verwenden kann. Das Alibaba-Entwicklungshandbuch empfiehlt, die Anzahl der Sammlungselemente nach „in“ sorgfältig zu bewerten und innerhalb von 1.000 zu halten. Zerlegen einer relationalen Abfrage Zerlegen Sie den Inner Join mehrerer Tabellen in kleine Abfragen. Wenn der Join mehr als drei Tabellen umfasst, muss er verboten werden. Zu den Vorteilen zählen:
ZusammenfassenDies ist das Ende dieses Artikels über langsame MySQL-Abfragen und Abfragerekonstruktion. Weitere relevante Inhalte zu langsamen MySQL-Abfragen und Abfragerekonstruktion 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:
|
<<: Zusammenfassung der CSS- und XTHML-Schreibstandards und häufigen Probleme (Seitenoptimierung)
>>: 4 Lösungen für CSS-Browserkompatibilitätsprobleme
Webdesign ist sowohl eine Wissenschaft als auch e...
Inhaltsverzeichnis Kurze Analyse des MySQL Master...
Inhaltsverzeichnis Erster Schritt: Der zweite Sch...
In meinem letzten Beitrag habe ich darüber gesproc...
Die Installation von MySQL 8.0.12 dauerte zwei Ta...
1. Normale Hintergrundunschärfe Code: <Stil>...
Inhaltsverzeichnis 1. Verwenden Sie Objekt, um ei...
In diesem Artikel erfahren Sie, wie Sie mit Vue e...
Konfigurieren des Startens und Herunterfahrens vo...
1) Geltungsbereich: schreibgeschützt: Eingabe [Typ...
Inhaltsverzeichnis Benutzerdefinierte Vue-Direkti...
Plätzchen Dies ist eine Standardmethode zum Speic...
Schreiben Sie am Anfang Dieser Artikel behandelt ...
1. <select style="width:195px" name=&...
Ich habe kürzlich an mehreren virtuellen Maschine...