Heim >Datenbank >MySQL-Tutorial >MySQL-Leistungsoptimierung max, Anzahloptimierung
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
Zum Beispiel: Fragen Sie den Zeitpunkt der letzten Zahlung ab
explain select max(payment_date) from payment \G;
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);
Führen Sie dann diese SQL-Anweisung aus und finden Sie:
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
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;
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'
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;
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
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
Zum Beispiel: Fragen Sie den Zeitpunkt der letzten Zahlung ab
explain select max(payment_date) from payment \G;
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);
Dann haben wir nach der Ausführung dieser SQL-Anweisung Folgendes gefunden:
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?
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;
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'
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;
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
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)!