所以我有一个脚本读取文本文件,将其组织成一个数组然后使用这段代码循环数据输入到MySQL服务器内的正确列/行:
$size = sizeof($str)/14;
$x=0;
$a=0; $b=1; $c=2; $d=3; $e=4; $f=5; $g=6; $h=7; $i=8; $j=9; $k=10; $l=11; $m=12; $n=13;
mysql_query('TRUNCATE TABLE scores');
do {
$query = "INSERT INTO scores (serverid,resetid, rank,number,countryname,land,networth,tag,gov,gdi,protection,vacation,alive,deleted)
VALUES ('$str[$a]','$str[$b]','$str[$c]','$str[$d]','$str[$e]','$str[$f]','$str[$g]','$str[$h]',
'$str[$i]','$str[$j]','$str[$k]','$str[$l]','$str[$m]','$str[$n]')";
mysql_query($query,$conn);
$a=$a+14; $b=$b+14; $c=$c+14; $d=$d+14; $e=$e+14; $f=$f+14; $g=$g+14; $h=$h+14; $i=$i+14; $j=$j+14; $k=$k+14; $l=$l+14; $m=$m+14; $n=$n+14;
$x++;
} while ($x != $size);
mysql_close($conn);
此代码指出文件在所有13列中循环的大小,直到它到达文本文件的最后一行。每次运行它都会清除数据库并加载新数据(按预期)。
我的问题是:这是一个很好的方法吗?或者是否有更快更干净的方式来执行与上面代码相同的操作?
我可以使用LOAD DATA LOCAL INFILE'$ myFile'“。”INTO TABLE rankfeed_temp FIELDS TERMINATED BY','以更有效的方式完成同样的工作?你的想法是什么?我正在努力使我的代码更加高效和快速。
答案 0 :(得分:2)
LOAD DATA可以更快,更有效地导入字符分隔文件,如csv。 LOAD DATA针对将大型文件导入MySQL表进行了优化,而您从文本文件中每行运行一个查询,执行速度极慢。
请注意LOCAL
选项仅适用于放置在MySQL-Server-Client Connection客户端的文件。尝试直接从充当MySQL的机器加载文件。
在插入之前禁用桌面上的可能键可以在导入时为您提供额外的速度。尝试使用已禁用的密钥,而无需对结果进行基准测试。