Vì vậy, câu hỏi là
có bất kỳ kỹ thuật nào để tăng tốc các loại truy vấn này không?
Chà, không hẳn vậy. Công cụ lưu trữ dựa trên cột có thể sẽ nhanh hơn với các truy vấn CHỌN COUNT (*) đó nhưng nó sẽ kém hiệu quả hơn đối với bất kỳ truy vấn nào khác.
Đặt cược tốt nhất của bạn là duy trì một bảng tóm tắt thông qua các trình kích hoạt. Nó không có nhiều chi phí và phần CHỌN sẽ ngay lập tức bất kể bảng lớn đến mức nào. Dưới đây là một số mã soạn sẵn:
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
//