Mysql
 sql >> Database >  >> RDS >> Mysql

Accelerare il conteggio delle righe in MySQL

Quindi la domanda è

esistono tecniche per velocizzare questo tipo di query?

Beh, non proprio. Un motore di archiviazione basato su colonne sarebbe probabilmente più veloce con quelle query SELECT COUNT(*) ma sarebbe meno performante praticamente per qualsiasi altra query.

La soluzione migliore è mantenere una tabella riepilogativa tramite trigger. Non ha molto sovraccarico e la parte SELECT sarà istantanea, non importa quanto sia grande il tavolo. Ecco un po' di codice standard:

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