sql >> Databasteknik >  >> RDS >> Mysql

Påskynda radräkningen i MySQL

Så frågan är

finns det några tekniker för att påskynda den här typen av frågor?

Tja, inte riktigt. En kolumnbaserad lagringsmotor skulle förmodligen vara snabbare med dessa SELECT COUNT(*)-frågor, men den skulle vara mindre presterande för i stort sett alla andra frågor.

Det bästa är att upprätthålla en sammanfattningstabell via triggers. Det har inte mycket omkostnader och SELECT-delen kommer att vara omedelbar oavsett hur stort bordet är. Här är en kod:

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. bädda in bild i html-e-post

  2. mysql_fetch_assoc():det angivna argumentet är inte en giltig MySQL-resultatresurs i php

  3. Infogar bara en rad om den inte redan finns där

  4. Villkorlig INSERT INTO-sats i postgres