所以问题是
有什么技术可以加快这类查询的速度吗?
好吧,不是真的。对于那些SELECT COUNT(*)查询,基于列的存储引擎可能会更快,但是对于几乎所有其他查询,它的性能都会降低。
最好的选择是通过触发器维护摘要表。它没有太多的开销,并且无论表有多大,SELECT部分都将是瞬时的。这是一些样板代码:
DELIMITER //CREATE TRIGGER ai_books AFTER INSERT ON booksFOR EACH ROW UPDATE books_cnt SET total = total + 1 WHERe status = NEW.status//CREATE TRIGGER ad_books AFTER DELETE ON booksFOR EACH ROW UPDATE books_cnt SET total = total - 1 WHERe status = OLD.status;//CREATE TRIGGER au_books AFTER UPDATE ON booksFOR EACH ROWBEGIN 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//



