Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Beschleunigung der Zeilenzählung in MySQL

Die Frage ist also

Gibt es Techniken zur Beschleunigung dieser Art von Abfragen?

Nicht wirklich. Eine spaltenbasierte Speicher-Engine wäre bei diesen SELECT COUNT(*)-Abfragen wahrscheinlich schneller, aber bei so ziemlich jeder anderen Abfrage weniger leistungsfähig.

Am besten pflegen Sie eine Übersichtstabelle über Trigger. Es hat nicht viel Overhead und der SELECT-Teil wird sofort ausgeführt, egal wie groß die Tabelle ist. Hier ist ein Boilerplate-Code:

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