加载MySQL数据库哪种方法更好?

时间:2014-07-18 05:53:57

标签: php mysql sql

所以我有一个脚本读取文本文件,将其组织成一个数组然后使用这段代码循环数据输入到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','以更有效的方式完成同样的工作?你的想法是什么?我正在努力使我的代码更加高效和快速。

1 个答案:

答案 0 :(得分:2)

LOAD DATA可以更快,更有效地导入字符分隔文件,如csv。 LOAD DATA针对将大型文件导入MySQL表进行了优化,而您从文本文件中每行运行一个查询,执行速度极慢。

请注意LOCAL选项仅适用于放置在MySQL-Server-Client Connection客户端的文件。尝试直接从充当MySQL的机器加载文件。

在插入之前禁用桌面上的可能键可以在导入时为您提供额外的速度。尝试使用已禁用的密钥,而无需对结果进行基准测试。