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 :
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 //
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!