Was macht die Funktion COUNT?COUNT ist eine spezialisierte Funktion, die normalerweise auf zwei verschiedene Arten verwendet wird: zum Zählen von Werten und Datenzeilen. Der Wert bezieht sich auf einen Ausdruck ungleich NULL (NULL bedeutet, dass der Wert fehlt). Wenn wir im Parameter COUNT einen Spaltennamen oder einen anderen Ausdruck angeben, zählt die Funktion COUNT, wie oft der Ausdruck einen Wert hat. Dies verwirrt viele Leute, vor allem, weil die Konzepte „Wert“ und „NULL“ mehrdeutig sind. Eine andere Form von COUNT besteht darin, einfach die Anzahl der Zeilen im Ergebnissatz zu zählen. So berechnet MySQL die COUNT-Funktion, wenn es weiß, dass der als Argument angegebene Ausdruck unmöglich NULL sein kann. Das typischste Beispiel ist COUNT(*), was Sie vielleicht für eine Alternative zum Erweitern aller Spalten einer Datentabelle halten. Tatsächlich ignoriert es ganze Spalten und zählt nur die Anzahl der Datenzeilen. Ein häufiger Fehler besteht darin, dass wir den Spaltennamen im Parameter COUNT angeben und denken, wir zählen die Zeilen. Wenn Sie die Anzahl der Zeilen im Ergebnis erhalten möchten, sollten Sie immer COUNT(*) verwenden, wodurch Ihre Abfrage expliziter wird und Leistungsprobleme vermieden werden. Die „Magie“ von MyISAMEin weit verbreitetes Missverständnis besteht darin, dass MyISAM bei COUNT-Abfragen sehr schnell ist. Die COUNT-Abfrage von MyISAM ist tatsächlich schnell, aber das Szenario, in dem diese Geschwindigkeit hoch ist, ist sehr begrenzt: Dieser Effekt kann nur erreicht werden, wenn die COUNT()-Abfrage ausgeführt wird und keine WHERE-Bedingung vorliegt, und in Wirklichkeit ist dieses Szenario selten. Der Grund, warum MySQL diese Anweisung optimieren kann, besteht darin, dass die Speicher-Engine immer die genaue Anzahl der Zeilen in der Datentabelle kennt. Wenn MySQL weiß, dass eine Spalte col nicht NULL sein kann, konvertiert es zur Optimierung auch COUNT(col) in COUNT(). MyISAM hat nichts „Magisches“ an sich, wenn WHERE-Bedingungen in COUNT-Abfragen oder andere Methoden zum Zählen von Werten vorhanden sind. Kann abhängig von vielen anderen Faktoren schneller oder langsamer als andere Speicher-Engines sein. Einfache COUNT-OptimierungWenn Sie die Anzahl aller Zeilen zählen möchten, während die Indexabdeckung der Datenzeilen nicht hoch ist, können Sie zur Optimierung COUNT(*) der MyISAM-Engine verwenden. Das folgende Beispiel verwendet die Standard-Weltdatenbank, um die Optimierung bei der Suche nach der Anzahl der Städte mit einer ID größer als 5 zu demonstrieren. Die von Ihnen geschriebene SQL-Anweisung könnte folgendermaßen aussehen: Wählen Sie COUNT(*) aus Welt.Stadt, wobei ID > 5 ist. Wenn Sie die Abfrage mit SHOW STATUS überprüfen, sehen Sie, dass 4079 Zeilen gescannt wurden. Wenn Sie eine Abfrage mit negativen Bedingungen verwenden und die Anzahl der Städte abziehen, deren ID kleiner oder gleich 5 ist, werden Sie feststellen, dass Sie die Scan-Ergebnisse auf 5 Zeilen reduzieren können. Wählen Sie (Wählen Sie COUNT (*) aus Welt.Stadt) - COUNT (*) aus Welt.Stadt, wobei ID <= 5; Diese Abfrage liest weniger Zeilen, da die Abfrage während der Abfrageoptimierungsphase in eine Konstante umgewandelt wird, was mit EXPLAIN angezeigt werden kann:
Ein häufiges Problem besteht darin, die Abfrage der Anzahl unterschiedlicher Werte derselben Spalte in einer Abfrageanweisung abzuschließen. Beispielsweise möchten Sie die Anzahl der unterschiedlichen Farben über eine Abfrageanweisung ermitteln. Sie können keine Abfrage wie „SELECT COUNT(color = 'blue' OR color='red') FROM items“ verwenden, da dadurch der Unterschied zwischen den entsprechenden Zählungen der verschiedenen Farben nicht erkannt würde. Sie können auch keine Farbe in die WHERE-Bedingung einfügen, wie etwa SELECT COUNT(*) FROM items WHERE color = 'blue' AND color = 'red'. Da sich Farben gegenseitig ausschließen, können Sie dieses Problem folgendermaßen lösen: SELECT SUM(IF(color = 'blau', 1, 0)) AS blau, SUMME (WENN (Farbe = „rot“, 1, 0)) als rot VON Elementen; Eine weitere Alternative besteht darin, COUNT anstelle von SUM zu verwenden, wodurch nur sichergestellt wird, dass der Beurteilungsausdruck des Ausdrucks ohne Wert falsch ist: SELECT COUNT(color = 'blue' OR NULL) als blau, ANZAHL(Farbe = „rot“ ODER NULL) als rot VON Elementen; Näherungswerte verwendenManchmal sind genaue Zahlen nicht erforderlich und es können Näherungswerte verwendet werden. Die vom EXPLAIN-Optimierer angegebene geschätzte Zeilenanzahl erfüllt normalerweise dieses Szenario, und EXPLAIN kann anstelle der eigentlichen Abfrage verwendet werden. In vielen Fällen ist eine genaue Menge viel weniger effizient als eine Annäherung. Ein Kunde bat einmal darum, die Anzahl der aktiven Benutzer auf seiner Website zu zählen. Die Anzahl der Benutzer wird zwischengespeichert und alle 30 Minuten aktualisiert. Dies ist von Natur aus ungenau, daher ist die Verwendung einer Schätzung akzeptabel. Diese Abfrage verwendet mehrere WHERE-Bedingungen, um sicherzustellen, dass inaktive Benutzer oder Standardbenutzer (diejenigen mit einer speziellen ID) nicht gezählt werden. Durch Entfernen dieser Bedingungen und geringfügige Änderungen des Zählvorgangs kann dieser effizienter gestaltet werden. Eine weitere Optimierung besteht darin, unnötige DISTINCT-Operationen zu entfernen und dadurch eine Dateisortieroperation zu vermeiden. Die optimierte Abfrage ist schneller und liefert nahezu genaue Ergebnisse. Komplexere OptimierungGenerell sind COUNT-Abfragen schwierig zu optimieren, da sie normalerweise viele Zeilen zählen müssen (auf viele Daten zugreifen). Eine weitere Alternative in MySQL ist die Verwendung von überdeckenden Indizes. Wenn das nicht ausreicht, muss möglicherweise die gesamte Systemanwendungsarchitektur angepasst werden. Denken Sie beispielsweise an statistische Datentabellen oder verwenden Sie ein externes Caching-System (wie etwa Memcached). Wir stehen oft vor einem ähnlichen Dilemma: schnell, präzise und einfach – Sie können nur zwei davon wählen! Oben finden Sie ausführliche Informationen zur Verwendung und Optimierung der MySQL COUNT-Funktion. Weitere Informationen zur Verwendung und Optimierung von MySQL COUNT finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Vue implementiert die Drag & Drop-Funktion für Bilder
>>: So stellen Sie MySQL-Master und -Slave in Docker bereit
Inhaltsverzeichnis Nachfragehintergrund Gedankena...
So zeigen Sie Versionsinformationen unter Linux a...
Vorwort Um zum Originalcode kompatibel zu sein, b...
1. Erstellen Sie den Ordner /usr/local/services/z...
Azure Container Registry ist ein verwalteter, ded...
1. Normale Hintergrundunschärfe Code: <Stil>...
1 MySQL Autocommit-Einstellungen MySQL führt stan...
Was ist ein Primärschlüssel? Ein Primärschlüssel ...
1. Rasterlayout (Raster): Es unterteilt die Webse...
In diesem Artikel wird hauptsächlich die Implemen...
<html> <Kopf> <meta http-equiv=&quo...
Nginx kann seine Reverse-Proxy-Funktion zum Imple...
Inhaltsverzeichnis Vorwort Was ist Deno? Vergleic...
Dokumenthinweise mit dem Attribut show-header <...
Inhaltsverzeichnis 1 Testumgebung 1.1 Server-Hard...