Chúng tôi có một bảng mysql tại bất kỳ thời điểm nào cũng có khoảng 12 triệu hàng. Chúng ta cần xóa dữ liệu cũ để giữ cho kích thước của bảng có thể quản lý được.
Ngay bây giờ chúng tôi đang chạy truy vấn này hàng ngày, vào lúc nửa đêm, bằng cách sử dụng một công việc định kỳ:
DELETE FROM table WHERE endTime < '1393632001'
Lần cuối cùng truy vấn chạy, nó đã kiểm tra 4.602.400, mất hơn 3 phút và CPU đi qua mái nhà.
Chúng ta có thể làm gì để giữ cho CPU, các kết nối db đồng bộ, độ sâu của đĩa, v.v. không bị tăng vọt một cách vô lý trong khi vẫn xóa dữ liệu cũ?
PS: Bạn sẽ nhận thấy rằng truy vấn đang thực sự xảy ra vào thời điểm không phù hợp trong chu kỳ sử dụng của chúng tôi. Giả sử rằng chúng tôi đã thay đổi thời gian của truy vấn xảy ra ở điểm sử dụng thấp nhất mỗi ngày. Ngoài ra, không có chỉ mục nào về "endTime" và tôi muốn giữ nguyên như vậy nếu có thể vì có rất nhiều dữ liệu được chèn rất thường xuyên và không cần tra cứu nhiều.