Tôi có bảng lớn với 22 triệu bản ghi. Tôi muốn thực hiện truy vấn tiếp theo:Truy vấn MySQL theo ngày với tỷ lệ lớn
select auto_alerts from alerts_stat where endDate > "2012-12-01"
Để cải thiện hiệu suất tôi đã thêm chỉ số BTREE cho endData lĩnh vực:
CREATE INDEX endDate_index USING BTREE ON alerts_stat(endDate)
Sau khi tôi bắt đầu để phân tích kế hoạch thực hiện truy vấn:
Khi tôi muốn nhận thông số từ 15 đến 7 ngày trước:
explain select alerts_sp from alerts_stat
where endDate between CURDATE() - 15 and CURDATE() - 7;
Tôi có kế hoạch thực hiện kế tiếp để xử lý 2.762.088 hàng.
'1', 'SIMPLE', 'browser_plugin_alerts_stat', 'range', 'endDate_index', 'endDate_index', '4', NULL, '2762088', 'Using where'
Khi tôi tăng khoảng bằng một ngày, tôi nhận được:
explain select alerts_sp from alerts_stat
where endDate between CURDATE() - 15 and CURDATE() - 6;
giải thích cho biết kế hoạch MySQL để xử lý tất cả 22.923.126 hàng.
'1', 'SIMPLE', 'browser_plugin_alerts_stat', 'ALL', 'endDate_index', NULL, NULL, NULL, '22932390', 'Using where'
Ví dụ chọn không có điều kiện nào trong quy trình WHERE 22,925,642.
Tôi có thể cải thiện kế hoạch thực hiện không? Có lẽ tôi đã nhầm lẫn ở đâu đó, hoặc là MySQL behaivior bình thường?
Cảm ơn. Hãy nghĩ rằng đó là trường hợp của tôi. Vì vậy, đó là hành vi cụ thể của MySQL. Tôi có thể cải thiện truy vấn bằng cách nào đó để có được ví dụ tổng ('alerts_sp') cho khoảng thời gian lớn? – Taky