Problème :
Comptage de lignes dans une vaste table InnoDB avec environ 9 millions d'enregistrements via COUNT(*) ou COUNT(id) pose des problèmes de performances importants, prenant plus de 6 secondes pour exécuter.
Tentative d'optimisation initiale :
En faisant référence à une source externe, il a été suggéré que forcer InnoDB à utiliser un index atténuerait le problème. Cependant, l'implémentation de "SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY)" n'a apporté aucune amélioration des performances.
Solution alternative :
MySQL 5.1.6 et versions ultérieures fournir une solution robuste :
1. Créer un tableau de statistiques :
Créez un tableau dédié nommé « stats » pour stocker le nombre de lignes :
CREATE TABLE stats (`key` varchar(50) NOT NULL PRIMARY KEY, `value` varchar(100) NOT NULL);
2. Planifier un événement :
Configurez un événement nommé "update_stats" à l'aide du planificateur d'événements de MySQL pour mettre à jour périodiquement la table des statistiques avec le nombre de lignes :
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);
Avantages :
Cette solution propose plusieurs avantages :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!