Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Acelerando a contagem de linhas no MySQL


Então a questão é

existem técnicas para acelerar esses tipos de consultas?

Bem, na verdade não. Um mecanismo de armazenamento baseado em coluna provavelmente seria mais rápido com essas consultas SELECT COUNT(*), mas teria menos desempenho para praticamente qualquer outra consulta.

Sua melhor aposta é manter uma tabela de resumo por meio de gatilhos. Ele não tem muita sobrecarga e a parte SELECT será instantânea, não importa o tamanho da tabela. Aqui está algum código clichê:
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
//