Heim > Datenbank > MySQL-Tutorial > MySQL-Leistungsoptimierung max, Anzahloptimierung

MySQL-Leistungsoptimierung max, Anzahloptimierung

黄舟
Freigeben: 2017-02-27 11:48:00
Original
2424 Leute haben es durchsucht


Hinweis: Fügen Sie vor dem Ausführen der SQL-Anweisung „explain“ hinzu, um den MySQL-Ausführungsplan anzuzeigen
Datenbank: die offiziell von MySQL bereitgestellte Sakila-Datenbank

Maximale Optimierung:

Zum Beispiel: Fragen Sie den Zeitpunkt der letzten Zahlung ab

 explain select max(payment_date) from payment \G;
Nach dem Login kopieren
Nach dem Login kopieren

MySQL-Leistungsoptimierung max, Anzahloptimierung

Der Abfragetyp ist einfach, es wird kein Index verwendet, die Anzahl der gescannten Zeilen beträgt mehr als 10.000 , und die benötigte Zeit beträgt 0,02 Sekunden

Optimierungsmethode:

Erstellen Sie einen Index für die Spalte „Zahlungsdatum“

create index idx_paydate on payment(payment_date);
Nach dem Login kopieren
Nach dem Login kopieren

Führen Sie dann diese SQL-Anweisung aus und finden Sie:

MySQL-Leistungsoptimierung max, Anzahloptimierung

Der Grund für dieses Ausführungsergebnis ist: Da der Index sequentiell angeordnet ist, können Sie durch den Index sofort erkennen, was der letzte ist

Zähleroptimierung

Zum Beispiel: In einer SQL-Anweisung gleichzeitig die Anzahl der Filme in den Jahren 2006 und 2007 ermitteln
Falscher Weg:

select count(release_year = '2006' OR release_year = '2007') from film;
Nach dem Login kopieren
Nach dem Login kopieren

Die Anzahl der Filme in den Jahren 2006 und 2007 kann nicht separat berechnet werden

select count(*) from film where release_year = '2006' and release_year = '2007'
Nach dem Login kopieren
Nach dem Login kopieren

release_year kann nicht gleichzeitig 2006 und 2007 sein, daher ist die Logik falsch

Die Abfrageoptimierung lautet wie folgt:

select count(release_year='2006' or null) as '2006年的电影数量',count(release_year='2007' or null) as '2007年的电影数量' from film;
Nach dem Login kopieren
Nach dem Login kopieren

Anweisungen In SQL werden count(*) und count(某列) ausgeführt. Die Ergebnisse sind manchmal unterschiedlich, da count(*) null enthält und das andere null ist, wird es nicht gezählt.
Mit dieser Funktion wird das Jahr außer 2006 als Null aufgezeichnet. Das Ausführungsergebnis ist wie in der folgenden Abbildung dargestellt
MySQL-Leistungsoptimierung max, Anzahloptimierung

Hinweis: Sie können die Ausführung von MySQL anzeigen Hinzufügen von „explain“ vor dem Ausführen der SQL-Anweisung. Planen Sie
Datenbank: Sakila-Datenbank, offiziell bereitgestellt von MySQL

Maximale Optimierung:

Zum Beispiel: Fragen Sie den Zeitpunkt der letzten Zahlung ab

 explain select max(payment_date) from payment \G;
Nach dem Login kopieren
Nach dem Login kopieren

MySQL-Leistungsoptimierung max, Anzahloptimierung

Die Art der Abfrage ist einfach, es wird kein Index verwendet, die Anzahl der gescannten Zeilen beträgt mehr als 10.000 und es dauert 0,02 Sekunden

Optimierungsmethode:

Erstellen Sie einen Index für die Spalte „Zahlungsdatum“

create index idx_paydate on payment(payment_date);
Nach dem Login kopieren
Nach dem Login kopieren

Dann haben wir nach der Ausführung dieser SQL-Anweisung Folgendes gefunden:

MySQL-Leistungsoptimierung max, Anzahloptimierung

Der Grund für dieses Ausführungsergebnis ist: Da der Index in der richtigen Reihenfolge angeordnet ist, können Sie durch den Index sofort das Endergebnis erkennen. Was ist eins?

Zähleroptimierung

Zum Beispiel: Finden Sie die Anzahl der Filme im Jahr 2006 heraus und 2007 in einer SQL-Anweisung gleichzeitig
Falscher Weg:

select count(release_year = '2006' OR release_year = '2007') from film;
Nach dem Login kopieren
Nach dem Login kopieren

Die Anzahl der Filme in 2006 und 2007 kann nicht separat berechnet werden

select count(*) from film where release_year = '2006' and release_year = '2007'
Nach dem Login kopieren
Nach dem Login kopieren

Veröffentlichungsjahr kann nicht 2006 und sein 2007 zur gleichen Zeit, daher ist die Logik falsch

Die Abfrage wird wie folgt optimiert:

select count(release_year='2006' or null) as '2006年的电影数量',count(release_year='2007' or null) as '2007年的电影数量' from film;
Nach dem Login kopieren
Nach dem Login kopieren

erklärt, dass in SQL die Ausführungsergebnisse von count(*) und count(某列) sind manchmal unterschiedlich, da count(*) null enthält, und wenn das andere null ist, werden sie nicht gezählt.
Mit dieser Funktion wird das Jahr, das nicht 2006 ist, als Null aufgezeichnet, und das Ausführungsergebnis ist wie in der folgenden Abbildung dargestellt
MySQL-Leistungsoptimierung max, Anzahloptimierung

Das Obige ist der Inhalt von max und Zähloptimierung, MySQL-Leistungsoptimierung und mehr. Für verwandte Inhalte achten Sie bitte auf die chinesische PHP-Website (www.php.cn)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage