Cualquier solución que intente eliminar tantos datos en una transacción abrumará el segmento de reversión y causará muchos problemas de rendimiento.
Una buena herramienta para ayudar es pt-archiver
. Realiza operaciones incrementales en lotes de filas de tamaño moderado, de la manera más eficiente posible. pt-archiver
puede copiar, mover o eliminar filas según las opciones.
La documentación incluye un ejemplo de eliminación de filas huérfanas, que es exactamente su escenario:
pt-archiver --source h=host,D=db,t=VALUE --purge \
--where 'NOT EXISTS(SELECT * FROM `KEY` WHERE key_id=`VALUE`.key_id)' \
--limit 1000 --commit-each
Ejecutar esto llevará mucho más tiempo para eliminar los datos, pero no utilizará demasiados recursos y sin interrumpir el servicio en su base de datos existente. Lo he usado con éxito para purgar cientos de millones de filas de datos obsoletos.
pt-archiver
es parte del Percona Toolkit for MySQL
, un conjunto gratuito (GPL) de secuencias de comandos que ayudan a realizar tareas comunes con MySQL y bases de datos compatibles.