Problem:
Zählen von Zeilen in einer riesigen InnoDB-Tabelle mit etwa 9 Millionen Datensätze über COUNT(*) oder COUNT(id) stellen erhebliche Leistungsherausforderungen dar und benötigen mehr als 6 Sekunden für die Ausführung.
Erster Optimierungsversuch:
Verweisen auf eine externe Quelle, it Es wurde vorgeschlagen, dass das Problem gemildert werden könnte, wenn InnoDB gezwungen würde, einen Index zu verwenden. Die Implementierung von „SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY)“ führte jedoch zu keiner Leistungsverbesserung.
Alternative Lösung:
MySQL 5.1.6 und spätere Versionen Bereitstellung einer robusten Lösung:
1. Erstellen Sie eine Statistiktabelle:
Erstellen Sie eine dedizierte Tabelle mit dem Namen „stats“, um die Zeilenanzahl zu speichern:
CREATE TABLE stats (`key` varchar(50) NOT NULL PRIMARY KEY, `value` varchar(100) NOT NULL);
2. Planen Sie ein Ereignis:
Richten Sie ein Ereignis mit dem Namen „update_stats“ mithilfe des MySQL-Ereignisplaners ein, um die Statistiktabelle regelmäßig mit der Zeilenanzahl zu aktualisieren:
CREATE EVENT update_stats ON SCHEDULE EVERY 5 MINUTE DO INSERT INTO stats (`key`, `value`) VALUES ('data_count', (select count(id) from data)) ON DUPLICATE KEY UPDATE value=VALUES(value);
Vorteile:
Diese Lösung bietet mehrere Vorteile:
Das obige ist der detaillierte Inhalt vonWie optimiere ich COUNT(*)-Abfragen in InnoDB-Tabellen für eine verbesserte Leistung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!