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
505 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!

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