¿Inserción de datos muy lenta en base de datos con mecanismo InnoDB?

publicado por: Anonymous

Primero estoy exportando a un script sql la estructura de una base de datos que esta creada con mecanismo MyISAM.

Luego ejecuto ese script para crear una base de datos vacía solo con la estructura de las tablas.

Después convierto las tablas de MyISAM a InnoDB sin problema.

Por ultimo estoy exportando a otro script sql los datos y lo ejecuto en la nueva base de datos ya con mecanismo InnoDB.

El problema esta en ejecutar el script que solo tiene datos demora demasiado insertando en una hora solo inserto datos en 10 tablas y la tabla con mas registros solo tiene 800000 no es para que demore tanto, convierto primero las tablas y después exporto los datos porque al convertir las tablas junto con los datos demora mucho más.

¿Por qué demora tanto en InnoDB?¿Es más lento para insertar los datos?
¿Cómo puedo insertar más rápido los datos?
¿Qué estoy haciendo mal?

solución

Para agregar a la respuesta de @Rene; si se está utilizando un diseño de base de datos relacional, i.e., con llaves foráneas, no se puede utilizar MyIsam.

La diferencia más notable entre MyIsam | InnoDB es el tema relacional, y la única razón por la cual se debería elegir MyIsam es si se va a utilizar la tabla más para lecturas muy recuentes e inserciones mas bien bajas. Teniendo en cuenta el tema de diseño de base de datos relacional

Para responder exactamente el por qué toma más tiempo, me gusta mucho ésta respuesta de DBA Stackexchange:

The reason is very simple. When you insert a row into MyISAM, it just
puts it into the server’s memory and hopes that the server will flush
it to disk at some point in the future. Good luck if the server
crashes.

When you insert a row into InnoDB it syncs the transaction durably to
disk, and that requires it to wait for the disk to spin. Do the math
on your system and see how long that takes.

En español:

Cuando se inserta una fila en MyISAM, simplemente se pone en la
memoria del servidor y espera a que el servidor lo ponga en el disco
en algún momento en el futuro.Buena suerte si el servidor se cae.

Cuando se inserta una fila en InnoDB, se sincroniza la transacción con
el disco, y requiere que se espere a que el disco gire. Por ésto es
que toma tanto tiempo.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *