我有一个逐行读取数据馈送、解析数据并将其插入MyISAM表的过程。当它第一次开始的时候,速度非常快,大概每秒1000张左右。随着时间的推移,速度越来越慢,现在我们大约每180秒就有1行。
函数的一般语法为:
function parse($file) {
$handle = fopen($file, 'r');
while (!feof($handle)) {
$line = fgets($fileHandle, 1000);
switch (substr($line, 0, 2)) { //gets record type
case '01' :
//parse the record
//escapes some strings with mysql_real_escape_string()
mysql_query('INSERT INTO table VALUES ($a, $b, $c...');
case '02' :
...
}
}
}
当前正在解析的文件有几百万条记录。服务器似乎没有丢失内存空间。有人知道是什么导致这个过程放缓吗?
最佳答案
这可能与必须如此频繁地写入索引有关。你已经在用MyISAM了这是我的第一个建议。
几点建议
每100行批量插入
使用INSERT DELAYED允许MySQL允许INSERT快速完成队列,当资源更为允许时,MySQL将插入记录。
让脚本创建一个SQL转储/分隔文件,您可以使用文件导入函数加载该文件,请参见http://dev.mysql.com/doc/refman/5.1/en/load-data.html这将比批插入快得多
关于php - 循环查询越来越慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4833445/