Mysql
 sql >> Base de données >  >> RDS >> Mysql

Accélérer le comptage des lignes dans MySQL

La question est donc

Existe-t-il des techniques pour accélérer ce type de requête ?

Eh bien pas vraiment. Un moteur de stockage basé sur des colonnes serait probablement plus rapide avec ces requêtes SELECT COUNT(*), mais il serait moins performant pour à peu près n'importe quelle autre requête.

Votre meilleur pari est de maintenir un tableau récapitulatif via des déclencheurs. Il n'y a pas beaucoup de frais généraux et la partie SELECT sera instantanée, quelle que soit la taille de la table. Voici un code passe-partout :

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