Jadi pertanyaannya adalah
apakah ada teknik untuk mempercepat kueri semacam ini?
Yah, tidak juga. Mesin penyimpanan berbasis kolom mungkin akan lebih cepat dengan kueri SELECT COUNT(*) tersebut, tetapi kinerjanya akan lebih rendah untuk hampir semua kueri lainnya.
Taruhan terbaik Anda adalah mempertahankan tabel ringkasan melalui pemicu. Itu tidak memiliki banyak overhead dan bagian SELECT akan seketika tidak peduli seberapa besar tabelnya. Berikut beberapa kode boilerplate:
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
//