Tenemos una tabla mysql que en cualquier momento tiene aproximadamente 12 millones de filas. Necesitamos eliminar datos antiguos para mantener el tamaño de la tabla algo manejable.
En este momento estamos ejecutando esta consulta diariamente, a medianoche, usando un trabajo cron:
DELETE FROM table WHERE endTime < '1393632001'
La última vez que se ejecutó la consulta examinó 4,602,400, tomó más de 3 minutos y la CPU se disparó.
¿Qué podemos hacer para evitar que la CPU, las conexiones db síncronas, la profundidad de referencia del disco, etc., se disparen sin razón mientras se borran los datos antiguos?
PD: Notará que la consulta realmente está ocurriendo en un momento bastante inoportuno en nuestro ciclo de uso. Suponga que ya hemos cambiado el tiempo de la consulta para que ocurra en el punto de uso más bajo cada día. Además, no hay ningún índice en "endTime" y preferiría mantenerlo de esa manera si es posible porque hay una tonelada de datos que se insertan con mucha regularidad y no hay mucha búsqueda.