Cómo eliminar todas las filas de la tabla MYSQL (2 millones de filas), manteniendo, p. Ej. últimos 100.
La consulta para seleccionar lo que quiero mantener sería:
SELECT id FROM mytable ORDER by date DESC LIMIT 100;
Entonces necesito una consulta que elimine todas las filas excepto las seleccionadas en esta consulta. Preparar una list de identificaciones usando where in
parece una exageración.
Tal vez podrías intentar algo como esto:
DELETE FROM mytable WHERE id NOT IN (SELECT id FROM mytable ORDER by date DESC LIMIT 100)
DELETE FROM mytable WHERE date < (SELECT date FROM mytable ORDER BY date DESC LIMIT 100,1)
trata eso
Debería eliminar todos los loggings, pero las últimas 100 inputs basadas en la columna de date
editar: errores tipocharts
Puede usar una statement preparada. Probé en MySQL y funciona.
PREPARE row_del FROM 'DELETE FROM mytable LIMIT ?' ; SELECT @row_num := count(*) - 100 FROM mytable ; EXECUTE row_del USING @row_num ;