En términos generales, la forma más rápida de mover un lote de datos ASCII sin procesar a cualquier DBMS es a través de técnicas de carga masiva. Como mencionó Joshua Forman, la forma de hacer esto en MySQL es usar LOAD DATA INFILE.
Pero además del uso de carga masiva, hay otras cosas a considerar.
Por ejemplo, si sabe que sus datos están limpios al ingresar, puede deshabilitar las claves primarias, las claves externas, los índices y verificar las restricciones durante la carga, y luego volver a habilitarlas después de la carga. Siempre es más rápido reconstruir índices y restricciones después del hecho que hacer que el DBMS verifique durante una carga de datos.
Pero debo advertirle que solo debe intentar esto si puede garantizar que los datos no violarán la integridad referencial cuando vuelva a activar las restricciones después de la carga. Si no eres POSITIVO porque tu carga de datos no violará las restricciones de integridad referencial, entonces no uses este truco.
- He sido fumador durante 8 años. Tomé el hábito cuando tenía 15 años. Por lo general, fumo de 6 a 7 cigarrillos al día, pero recientemente he dejado de fumar. ¿Mi cuerpo seguirá siendo afectado más adelante en la vida?
- Soy titular de una tarjeta verde. ¿Cuánto tiempo lleva obtener la ciudadanía estadounidense y con qué frecuencia puedo ir a mi lugar de origen? ¿Cuáles son las ventajas de conservar una tarjeta verde y esperar la ciudadanía?
- Me mudaré a Kansas City el lunes y no tengo amigos. ¿Qué tengo que hacer?
- Recibo notificaciones de que alguien comenta mi foto, pero cuando la reviso no aparece nada. ¿Hay alguna forma de ver estos mensajes?
- Mi novio tiene un coeficiente intelectual bajo. Está a punto de perder su trabajo porque la gente en su lugar de trabajo piensa que “no tiene sentido común”. ¿Cómo lo ayudo?
Además, mucho depende del sistema que esté cargando, pero si puede evitar desactivar el registro de transacciones durante la carga, también puede obtener algo de rendimiento.
Además de deshabilitar las restricciones y usar técnicas de carga masiva, vale la pena pasar un tiempo pensando en su infraestructura física. La clave para mejorar el rendimiento es eliminar los cuellos de botella. ¿Se pueden almacenar los datos que está cargando en la misma máquina física que la base de datos que está cargando? Si es así, esto podría eliminar la latencia de la red. Por supuesto, si está organizando sus datos en la misma máquina que aloja la base de datos que está cargando, no desea cambiar un cuello de botella por otro. Use un disco para alojar los datos que no contengan ninguno de los espacios de tablas utilizados para almacenar las tablas que está cargando o las tablas del sistema MySQL. (es decir, asegúrese de no causar un cuello de botella de E / S entre la lectura de datos ASCII y la inserción de datos en las tablas de destino)