Chúng tôi có một bảng với khoảng 25.000.000 hàng gọi là 'sự kiện' có giản đồ sau:truy vấn SQL: Tăng tốc cho các bảng lớn
TABLE events
- campaign_id : int(10)
- city : varchar(60)
- country_code : varchar(2)
Các truy vấn sau đây có RẤT dài (> 2000 giây):
SELECT COUNT(*) AS counted_events, country_code
FROM events
WHERE campaign_id` in (597)
GROUPY BY city, country_code
ORDER BY counted_events
Chúng tôi phát hiện ra rằng đó là vì phần GROUP BY
.
Đã có chỉ mục idx_campaign_id_city_country_code trên (campaign_id, city, country_code)
được sử dụng.
Có thể ai đó có thể đề xuất giải pháp tốt để tăng tốc độ?
Cập nhật:
'Giải thích' cho thấy rằng trong số nhiều chỉ số có thể MySql sử dụng này: 'idx_campaign_id_city_country_code', cho các hàng nó cho thấy: '471.304' và 'Extra' nó cho thấy: 'Sử dụng ở đâu ; Sử dụng tạm thời; Sử dụng filesort '-
Dưới đây là toàn bộ kết quả của GIẢI THÍCH:
- id: '1'
- select_type: 'đơn giản'
- bảng: ''
- loại:' sự kiện ref '
- possible_keys: 'index_campaign, idx_campaignid_paid, idx_city_country_code, idx_city_country_code_campaign_id, idx_cid, idx_campaign_id_city_country_code'
- chính:' idx_campaign_id_city_country_code '
- key_len: '4'
- ref: 'const'
- hàng: '471.304'
- Extra:' Sử dụng ở đâu; Sử dụng tạm thời; Sử dụng filesort'
UPDATE:
Ok, tôi nghĩ rằng nó đã được giải quyết:
Nhìn vào truy vấn dán ở đây một lần nữa tôi nhận ra rằng tôi quên đề cập đến ở đây là đã có thêm một cột trong SELECT được gọi là 'country_name'. Vì vậy, truy vấn rất chậm sau đó (bao gồm cả country_name), nhưng tôi sẽ chỉ để nó ra và bây giờ hiệu suất của truy vấn là hoàn toàn ok. Xin lỗi vì sai lầm đó!
Cảm ơn tất cả các nhận xét hữu ích của bạn, tôi sẽ nêu lên tất cả các câu trả lời hay! Có một số bổ sung thực sự hữu ích, mà tôi cũng có thể chúng tôi áp dụng (như thay đổi các loại vv).
gì giải thích SELECT COUNT (*) AS counted_events, mã quốc gia TỪ ĐÂU sự kiện campaign_id' tại (597) GROUPY THEO thành phố, mã quốc gia ORDER BY counted_events cho? – sathia
'Giải thích' cho thấy rằng trong số nhiều chỉ mục có thể MySql sử dụng chỉ mục này: 'idx_campaign_id_city_country_code', cho các hàng hiển thị: '471304' và đối với 'Phụ trang', nó hiển thị: 'Sử dụng vị trí; Sử dụng tạm thời; Sử dụng filesort ' – user3767671
Cái ác ở đây là 'ORDER BY counting_events' đang gây ra' Sử dụng tạm thời; Sử dụng filesort '' –