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

Fremskynder rækkeoptællingen i MySQL

Så spørgsmålet er

er der nogen teknikker til at fremskynde den slags forespørgsler?

Nå, egentlig ikke. En kolonnebaseret lagermaskine ville sandsynligvis være hurtigere med disse SELECT COUNT(*)-forespørgsler, men den ville være mindre effektiv for stort set alle andre forespørgsler.

Dit bedste bud er at opretholde en oversigtstabel via triggere. Den har ikke meget overhead, og SELECT-delen vil være øjeblikkelig, uanset hvor stort bordet er. Her er en kedelkode:

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


  1. Hvordan IFNULL() virker i MariaDB

  2. ingen sqljdbc_auth i java.library.path

  3. En Event Management Data Model

  4. String -> java.util.Date -> java.sql.Date (med tidsstempel)