Maison > base de données > tutoriel mysql > Comment optimiser les requêtes COUNT(*) sur les tables InnoDB pour de meilleures performances ?

Comment optimiser les requêtes COUNT(*) sur les tables InnoDB pour de meilleures performances ?

DDD
Libérer: 2024-11-02 03:14:02
original
448 Les gens l'ont consulté

How to Optimize COUNT(*) Queries on InnoDB Tables for Improved Performance?

Amélioration des performances de COUNT(*) sur InnoDB à l'aide d'Index

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

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

Avantages :

Cette solution propose plusieurs avantages :

  • Autonome :Évite le besoin de scripts externes ou de gestion de files d'attente.
  • Adaptable :La fréquence de mise à jour peut être personnalisé en fonction de la fraîcheur souhaitée du décompte.
  • Acquisition efficace du décompte : En récupérant le décompte de la table de statistiques plutôt qu'en effectuant une requête COUNT(*) en direct, les performances sont considérablement améliorées.

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