Si teneis alguna base de datos con unos cuantos millones de registros y se os ocurre lanzar un ‘OPTIMIZE TABLE…’ os podrán dar las tantas de la noche que eso tarda rato largo… Hay otra forma un poco menos convencional que puede ayudar a optimizar los datos, se trata de volcar el contenido a otra tabla nueva y cargarnos la original:
En este ejemplo, nos cansamos de lo que tarda la optimizacion:
mysql> optimize table tabla_enorme ; ^CQuery aborted by Ctrl+C +------------------------------+----------+----------+---------------------------------+ | Table | Op | Msg_type | Msg_text | +------------------------------+----------+----------+---------------------------------+ | mibasededatos.tabla_enorme | optimize | error | Query execution was interrupted | | mibasededatos.tabla_enorme | optimize | status | Operation failed | +------------------------------+----------+----------+---------------------------------+ 2 rows in set, 1 warning (32 min 9.54 sec)
Con 32 minutos ya basta 😀 y aún le quedaban horas.
Si hacemos el volcado a una nueva tabla :
mysql> create table tabla_enorme2 ( select * from tabla_enorme ); Query OK, 16638600 rows affected (2 min 9.44 sec) Records: 16638600 Duplicates: 0 Warnings: 0 mysql> create index puntos_id_order on tabla_enorme2 (id_order) ; Query OK, 16638600 rows affected (2 min 24.39 sec) Records: 16638600 Duplicates: 0 Warnings: 0 mysql> mysql> rename table tabla_enorme to tabla_enorme_old; Query OK, 0 rows affected (0.14 sec) mysql> rename table tabla_enorme2 to tabla_enorme ; Query OK, 0 rows affected (0.00 sec)
En 5 minutos lo tenemos hecho y nos sobra para insertar unos indices y tal 😀
Deja una respuesta