Porque estás insertando uno a uno los registros, y con cada INSERT se actualiza el índice... Es una tarea muy lenta.
Hay dos formas básicas de acelerar el proceso, pero ambas se tienen que implementar desde código de aplicación:
1. Usando
LOAD DATA INFILE, que requiere que los datos se vuelquen primero a un archivo plano, separado por comas. Colo el LOAD DATA no opera dentro de los store procedures, no puedes crear uno para este treabajo.
2. Usando inserciones múltiples. Es el caso de crear una inmensa cadena en la aplicación con muchos VALUES a insertar en una sola ejecución:
Código sql:
Ver originalINSERT INTO Tabla1(campos)
VALUES(valores), (valores), (valores), (valores), (valores),
(valores), (valores), (valores);
Yo personalmente, he manejado inserciones múltiples de 50 registros, de 100 y de hasta un millar, sin mayores problema. Depende del tamaño del buffer.