У нас є таблиця mysql, яка в будь-який момент налічує близько 12 мільйонів рядків. Нам потрібно видалити старі дані, щоб розмір таблиці був дещо керованим.
Зараз ми виконуємо цей запит щодня, опівночі, використовуючи завдання cron:
DELETE FROM table WHERE endTime < '1393632001'
В останній раз, коли запит був проведений, він вивчив 4 602 400, зайняв 3 хвилини і процесор пройшов крізь дах.
Що ми можемо зробити, щоб центральний процесор, синхронні db-з'єднання, глибина диска тощо не безпідставно шипили, зберігаючи при цьому старі дані?
PS: Ви помітите, що запит насправді відбувається у досить невідповідний час у нашому циклі використання. Припустимо, що ми вже змістили час запиту, який має відбуватися в найнижчій точці використання кожного дня. Крім того, немає індексу на "endTime", і я вважаю за краще зберігати його таким чином, якщо це можливо, тому що тонна даних вставляється дуже регулярно, і не дуже багато пошуку.