sql >> Base de Datos >  >> RDS >> Mysql

Acelerar el conteo de filas en MySQL

Entonces la pregunta es

¿existen técnicas para acelerar este tipo de consultas?

Bueno en realidad no. Un motor de almacenamiento basado en columnas probablemente sería más rápido con esas consultas SELECT COUNT(*), pero tendría menos rendimiento para prácticamente cualquier otra consulta.

Su mejor apuesta es mantener una tabla de resumen a través de disparadores. No tiene mucha sobrecarga y la parte SELECCIONAR será instantánea sin importar cuán grande sea la mesa. Aquí hay un código repetitivo:

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