Lorsque vous traitez des tables InnoDB volumineuses mais étroites, l'exécution des requêtes COUNT(*) peut être notoirement lente. Cela a été rencontré dans un scénario dans lequel une table composée d'environ 9 millions d'enregistrements entraînait une opération COUNT(*) de 6 secondes.
Selon la documentation MySQL, forcer InnoDB à utiliser un index pour les opérations de comptage peut générer des performances significatives. gains. Ceci est réalisé en utilisant la syntaxe USE INDEX (index_name) dans la requête.
Dans l'exemple donné, la requête suivante a été utilisée :
<code class="sql">SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY);</code>
Cependant, malgré l'utilisation de l'index, le les performances sont restées épouvantables. En recherchant d'autres options de dépannage, il a été découvert que MySQL 5.1.6 introduisait une solution efficace impliquant le planificateur d'événements et la mise en cache statistique.
En utilisant le planificateur d'événements et en maintenant un table stats, l’opération COUNT(*) peut être considérablement optimisée. Le processus implique la création d'une table de statistiques pour stocker les données de décompte :
<code class="sql">CREATE TABLE stats (`key` VARCHAR(50) NOT NULL PRIMARY KEY, `value` VARCHAR(100) NOT NULL);</code>
Par la suite, un événement est créé pour mettre régulièrement à jour la table de statistiques avec le décompte actuel :
<code class="sql">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);</code>
Cet auto -la solution contenue permet des intervalles de rafraîchissement personnalisables, garantissant l'exactitude et la fraîcheur du décompte stocké. Même si elle n'est peut-être pas parfaite, elle offre des améliorations considérables en termes de performances par rapport aux méthodes traditionnelles.
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!