2012-04-19 19 views
34

Tengo un archivo SQL que contiene dos tablas con alrededor de 600,000 filas en total. Ayer, traté de importar el archivo a mi base de datos MySQL en Fedora 16, y me llevó más de 2 horas importar el archivo. En mi PC con Windows tardé 7 minutos. Mis máquinas Linux y Windows tienen exactamente el mismo hardware. Un par de mis amigos también lo intentaron y tuvieron una experiencia similar.¿Por qué la importación de SQL es tan lenta?

El comando que estábamos usando era: mysql -u root database_name < sql_file.sql.

¿Por qué hay tanta diferencia de velocidad?

+0

Mismos tipos de tabla (INNODB/MYISAM/...)? –

+0

Sí, los tipos de tabla son los mismos: Innodb –

+0

¿Has comprobado mysqlimport? Ver http://stackoverflow.com/questions/2956407/mysql-console-slow-on-import-of-huge-sql-files – rorycl

Respuesta

65

Mi apuesta es que Fedora 16 está cumpliendo con la semántica de transacción/sincronización y Windows no. Si haces los cálculos, 600,000 actualizaciones en dos horas son 5,000 por minuto. Ese es el mismo orden de magnitud que la tasa de rotación de un disco.

Puede intentar agregar SET autocommit=0; al principio de su archivo de importación y COMMIT; hasta el final. Consulte this page para obtener más información.

+2

¡Hizo una gran diferencia! Lo intenté de nuevo, y el tiempo total para la importación fue inferior a 3 minutos. Tanques mucho :) –

+0

La diferencia es astronómica. He esperado 20 minutos en un archivo de volcado de 27MB antes de volver a empezar con su sugerencia. Tomó menos de un minuto después. ¡Gran respuesta! –

+0

Esto funcionó bien. De lo contrario, la remodelación del archivo de entrada con inserciones en bloque también funciona. Gracias. –

3

¿Por qué no se exporta como archivo .sql BULK INSERT opción y la importación, pruebe estas opciones al tomar una copia de seguridad usando mysqldump

--extended-insert: utilizar instrucciones de inserción de múltiples filas

--quick: no lo haga búfer de datos de fila, bueno si las tablas son grandes

Nota: Asegúrese de que debe aumentar el valor de max_allowed_packet = 32M o más en my.cnf antes de generar el archivo .sql.

+0

Gracias por su respuesta, lo verificaré. –

+1

@LarsSteen ¿La sugerencia de Mahesh Patil hizo alguna diferencia? – Alex

+0

No. No hizo mucha diferencia. –

Cuestiones relacionadas