8

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?

Trả lời

3

Khi tập hợp kết quả vượt quá 8-9% của tất cả các hàng, MySQL thực hiện quét toàn bộ bảng. Với tôi, có vẻ như một ngày nào đó bạn thêm cú vung MySQL theo hướng quét toàn bộ bảng. Bạn có thể thử buộc chỉ mục xem liệu kết quả có tốt hơn không.

UPDATE:

Từ những gì tôi đã đọc, tối ưu truy vấn MySQL có xu hướng chọn sai trong trường hợp đường biên giới như thế này, vì vậy nó có thể dễ dàng làm việc tốt hơn buộc một chỉ mục. Nếu không, đây là truy vấn đơn giản và tôi không còn nhiều chỗ để tối ưu hóa nữa.

Có thể tạo Covering index trên hai cột này và buộc việc sử dụng nó có thể mang lại kết quả tốt nhất.

+0

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

Các vấn đề liên quan