Abel Muiño

home

Cómo cargar registros en Mysql de forma eficiente

10 Dec 2009

Después de haber intentado cargar la información de geonames (distribuida en ficheros de texto delimitados... tipo CSV) en la base de datos de triptance.com al estilo programador (leer cada lí­nea del fichero de datos, mapearlo e insertarlo) y ver que tardaba casi dos horas cada prueba, me he pasado al estilo DBA: usar las herramientas de Mysql.

Este artí­culo tiene la información necesaria (en inglés). 

En mi caso, los registros están separados por tabuladores en lugar de comas (y, obviamente, los campos de mi tabla son distintos).

Lo primero es entrar en el cliente de lí­nea de comandos de mysql:

mysql -u root triptance_dev

Lo siguiente, ejecutar el comando de carga:

LOAD DATA LOCAL INFILE 'tmp/allCountries.txt' 
INTO TABLE geonames_raw
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
(geoname_id, name, ascii_name, alternate_names, lat, lng, feature_class, feature_code, country_code, cc2, admin1_code, admin2_code, admin3_code, admin4_code, population, elevation, gtopo30, timezone_id, modification_date)

Y, para terminar, disfrutar del resultado:

Query OK, 6914645 rows affected, 65535 warnings (4 min 12.55 sec)

... hasta sobra tiempo para escribir un post sobre el tema.