MySQL tarda días en borrar datos

Buenos días,

en el trabajo tenemos una base de datos que está creciendo a lo bestia. Vamos por 150GB y es insostenible, con lo que hemos decidido hacer purga de históricos.

Es una MySQL con InnoDB. Si borramos registros de tablas NO recuperamos espacio. Esto lo hemos solventado con la opción "innodb_file_per_table=1". Ahora tengo un fichero ibd por cada tabla. Bien.

La tabla más gorda tiene 4 meses de datos, y quiero quedarme sólo con el último. Si le lanzo una consulta que me borre todo lo anterior a ese mes:

1) Me tarda días (literalmente)
2) Me da error de timeout o de lock de tabla (no hay ningún proceso salvo el propio cliente SQL en local).

He decidido hacerlo por trozos: de 2 semanas en 2 semanas.

Algunos delete me han tardado 5 minutos, y otros los he dejado toda la noche y nada. No lo entiendo porque la carga es la misma (2 semanas).

¿Alguien tiene idea de por qué se comporta así o de cómo solucionarlo?

Gracias!
Puedes usar el comando explain

EJ:
EXPLAIN SELECT * FROM `user`;

https://www.sitepoint.com/explain-sql-explain-queries/

El cual te dara mas informacion sobre la consulta, si ultiza indices, sino etc.

¿Los campos del where estan indexados? ¿Si haces un select con dichos campos cuanto tarda?
Hola @alex120.

El problema es ése. El campo no está indexado. Y son millones de registros.

Probaré con el explain.

Gracias.

EDIT: Nada, @alex120. El explain no funciona con DELETE... y sigo sin entender la diferencia de tiempo entre unas consultas y otras.
2 respuestas