estoy teniendo un momento muy problemático intentar importar un archivo CSV grande en mysql en localhostimportar grandes CSV en la base de datos MySQL
la CSV es de unos 55 MB y tiene alrededor de 750.000 filas.
ahora que he recurrido a escribir un script que analiza el csv y vuelca las filas 1 por uno
aquí está el código:
$row = 1;
if (($handle = fopen("postal_codes.csv", "r")) !== FALSE)
{
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$num = count($data);
$row++;
for ($c=0; $c < $num; $c++)
{
$arr = explode('|', $data[$c]);
$postcode = mysql_real_escape_string($arr[1]);
$city_name = mysql_real_escape_string($arr[2]);
$city_slug = mysql_real_escape_string(toAscii($city_name));
$prov_name = mysql_real_escape_string($arr[3]);
$prov_slug = mysql_real_escape_string(toAscii($prov_name));
$prov_abbr = mysql_real_escape_string($arr[4]);
$lat = mysql_real_escape_string($arr[6]);
$lng = mysql_real_escape_string($arr[7]);
mysql_query("insert into cities (`postcode`, `city_name`, `city_slug`, `prov_name`, `prov_slug`, `prov_abbr`, `lat`, `lng`)
values ('$postcode', '$city_name', '$city_slug', '$prov_name', '$prov_slug', '$prov_abbr', '$lat', '$lng')") or die(mysql_error());
}
}
fclose($handle);
}
el problema es que esto es tomando una eternidad para ejecutar cualquier solución ... sería genial.
¿Tiene índices sobre la mesa? Si es así, considere insertar índices desactivados y reconstruir una vez que haya terminado. –
'load data infile' de mysql puede manejar la mayoría de los formatos csv directamente: http://dev.mysql.com/doc/refman/5.1/en/load-data.html (busque 'csv'). –