Der Inhalt dieses Artikels befasst sich mit der Verwendung von count() in großen MySQL-Tabellen und der Optimierung von count() in MySQL. Ich hoffe, dass er hilfreich ist dir geholfen.
Eine einzelne Tabelle enthält mehr als 60 Millionen Daten, aber Sie können sie nicht aufteilen. Sie müssen separat zählen, wie viele Daten sich in der Tabelle befinden, wie viele Produkte A und wie viele Produkte B haben
Vor der Optimierung ist die Tabellenstruktur wie folgt: Um den Inhalt auszublenden, habe ich die entsprechenden Felder unscharf gemacht.CREATE TABLE `xxxx` ( `link` varchar(200) DEFAULT NULL, `test0` varchar(500) DEFAULT NULL, `test1` varchar(50) DEFAULT NULL, `test2` int(11) DEFAULT NULL, `test3` varchar(20) DEFAULT NULL, `test4` varchar(50) DEFAULT NULL, `test5` varchar(50) NOT NULL, `inserttime` datetime DEFAULT NULL, `test6` bit(1) NOT NULL DEFAULT b'0', `A` bit(1) NOT NULL DEFAULT b'0', `B` bit(1) NOT NULL DEFAULT b'0' , PRIMARY KEY (`test5`), KEY `test6` (`test6`) USING BTREE, KEY `A` (`A`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
count(1) benötigt 907,581s
count(A) Zählt den Index.
count(test6) Zählt den Primärschlüssel.
Da diese Tabelle nicht gut optimiert ist, dauert ausnahmslos jeder der oben genannten Schritte Tausende von Sekunden, was für uns unerträglich ist.
Jetzt beginnen wir mit der Analyse und Behebung dieses Problems.
Es wird erwartet, dass die Anzahl(*) der gesamten Tabelle innerhalb von 200 Sekunden normal, innerhalb von 100 gut und innerhalb von 50 ausgezeichnet sein sollte.
Zuerst habe ich test6 daraus extrahiert und eine separate Tabelle erstellt. Führen Sie den Vorgang aus.
Insgesamt 61.500.000 DatenCount(*) dauert 10,238 Sekunden
Count(1) dauert 8,710 Sekunden
Count(test6) an Die Primärschlüsselanzahl beträgt 12,957 Sekunden.
Davon ist
am effizientesten und um52,0 %
schneller als die langsamste > bestimmt die Felder, die Sie auf den optimalen Wert ändern können, zum Beispiel:count(1)
varchar ist mehr char. Obwohl varchar die Größe des Speicherplatzes automatisch zuweisen kann, muss .varchar 1 bis 2 zusätzliche Bytes zum Aufzeichnen verwenden Erhöhen Sie die Länge der Zeichenfolge und erhöhen Sie die Aktualisierungsvorgangszeit. count(pk)
Datum/Uhrzeit wird in Zeitstempel geändert. Letzterer liegt zwischen 1978 und 2038.
Code-Implementierung der Infinitus-Klassifizierung in MySQL
Mysql-Datenbank Zusammenfassung der Optimierungsmethoden (muss gelesen werden)
Das obige ist der detaillierte Inhalt vonVerwendung von count() in einer großen MySQL-Tabelle und Optimierung von count() in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!