Maison > base de données > tutoriel mysql > Comment puis-je optimiser les performances de COUNT(*) sur InnoDB avec des indices et une mise en cache statistique ?

Comment puis-je optimiser les performances de COUNT(*) sur InnoDB avec des indices et une mise en cache statistique ?

DDD
Libérer: 2024-11-03 12:52:30
original
475 Les gens l'ont consulté

How Can I Optimize COUNT(*) Performance on InnoDB with Indices and Statistical Caching?

Optimisation des performances de COUNT(*) sur InnoDB avec des indices

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>
Copier après la connexion

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.

Planificateur d'événements et 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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal