Maison > base de données > tutoriel mysql > le corps du texte

Comment puis-je accélérer les requêtes de comptage de lignes dans les grandes tables MySQL ?

DDD
Libérer: 2024-11-19 16:46:03
original
353 Les gens l'ont consulté

How Can I Speed Up Row Counting Queries in Large MySQL Tables?

Accélération du comptage de lignes dans MySQL

Problème :

Requêtes MySQL pour compter le nombre de lignes dans une grande table ou les regrouper par une colonne particulière peut devenir lent à mesure que le tableau s'agrandit. Même l'indexation de la colonne utilisée pour le regroupement n'améliore pas systématiquement les performances.

Exploration :

Pour optimiser ces requêtes, des approches alternatives sans utiliser la mise en cache incluent :

  • Utilisation d'un moteur de stockage basé sur des colonnes :Cette approche peut améliorer les requêtes count(*), mais pourrait compromettre les performances d'autres opérations.
  • Maintenir une table récapitulative : Les déclencheurs peuvent mettre à jour un tableau récapitulatif distinct chaque fois qu'une ligne est insérée, supprimée ou mise à jour. Cette approche fournit un décompte instantané des lignes lors des opérations SELECT.

Mise en œuvre :

Pour gérer un tableau récapitulatif, les déclencheurs passe-partout suivants peuvent être utilisés :

DELIMITER //

CREATE TRIGGER ai_books AFTER INSERT ON books
FOR EACH ROW UPDATE books_cnt SET total = total + 1 WHERE status = NEW.status
//
CREATE TRIGGER ad_books AFTER DELETE ON books
FOR EACH ROW UPDATE books_cnt SET total = total - 1 WHERE status = OLD.status;
//
CREATE TRIGGER au_books AFTER UPDATE ON books
FOR EACH ROW
BEGIN
    IF (OLD.status <> NEW.status)
    THEN
        UPDATE books_cnt SET total = total + IF(status = NEW.status, 1, -1) WHERE status IN (OLD.status, NEW.status);
    END IF;
END
//
Copier après la connexion

En conservant un tableau récapitulatif, les requêtes de comptage de lignes peuvent être exécutées beaucoup plus rapidement, quelle que soit la taille du tableau.

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