CARGAR DATOS DE DATOS e INSERTOS extendidos tienen sus distintas ventajas.
LOAD DATA INFILE está diseñado para la carga masiva de datos de la tabla en una sola operación junto con campanas y silbatos para realizar cosas como:
- Saltar líneas iniciales
- Saltar columnas específicas
- Transformando columnas específicas
- Carga de columnas específicas
- Manejo de cuestiones clave duplicadas
Se necesita menos sobrecarga para analizar
Por otro lado, si solo importa 100 filas en lugar de 1,000,000 filas, INSERT extendido es sensato.
Tenga en cuenta que mysqldump se diseñó alrededor de INSERT extendidos en aras de llevar el diseño de la tabla junto con los datos, ya que realiza la inyección de cientos o miles de filas por INSERT. LOAD DATA INFILE siempre crea una dicotomía física entre el esquema y los datos.
Desde el punto de vista de la aplicación, LOAD DATA INFILE también es más insensible al cambio de esquema que los INSERT extendidos.
Uno puede ir y venir de lo bueno, lo malo y lo feo de usar LOAD DATA INFILE. Independientemente de la técnica que utilice, siempre debe establecer el tamaño de bulto_insertado_de_búfer . ¿Por qué?
De acuerdo con la documentación de MySQL en bulk_insert_buffer_size:
MyISAM usa un caché especial en forma de árbol para hacer insertos masivos más rápido para INSERT ... SELECT, INSERT ... VALUES (...), (...), ..., y LOAD DATA INFILE cuando agrega datos a no vacío mesas. Esta variable limita el tamaño del árbol de caché en bytes por subproceso. Establecerlo en 0 deshabilita esta optimización. El valor predeterminado es 8 MB.
Durante años, he visto cliente tras cliente no configurar esto y dejarlo en 8 MB. Luego, cuando deciden usar LOAD DATA INFILE o importar mysqldumps, pueden sentir que algo anda mal. Por lo general, recomiendo configurar esto a un moderado 256M. En algunos casos, 512M.
Una vez que tenga un búfer INSERT masivo lo suficientemente grande, el uso de cualquiera de las técnicas se convierte en académico y se reduce a la elección personal. Para aplicaciones en las que inserta INSERT de forma masiva solo 100 filas bajo demanda, quédese con INSERTs extendidos.
Para ser justos, decir LOAD DATA INFILE es más rápido que las declaraciones INSERT normales es una especie de declaración cargada principalmente porque la configuración no se tiene en cuenta. Incluso si configura un punto de referencia entre LOAD DATA INFILE y los INSERT extendidos con un tamaño adecuado de bulk_insert_buffer_size, los nanosegundos guardados al analizar cada fila solo pueden producir resultados nominales en el mejor de los casos a favor de LOAD DATA INFILE.
Continúe y agregue esto a my.cnf
[mysqld]
bulk_inset_buffer_size=256M
También puede configurarlo solo para su sesión antes de lanzar INSERTs extendidos
SET bulk_insert_buffer_size= 1024 * 1024 * 256;
ACTUALIZACIÓN 2012-07-19 14:58 EDT
Para mantener las cosas en perspectiva, el búfer de inserción masiva solo es útil para cargar tablas MyISAM, no InnoDB. Escribí una publicación más reciente sobre la carga masiva de InnoDB: la carga de Mysql desde el archivo atascado esperando en el disco duro
LOAD DATA INFILE
: Inserciones de alta velocidad con MySQL . En pocas palabras: puede lograr el 65% del rendimiento delLOAD DATA INFILE
uso de inserciones extendidas. Obtuve 240,000 insertos / segundo en hardware moderno.