mysql Optimizando tablas grandes de forma alternativa

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

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.