我有一个逐行读取数据馈送、解析数据并将其插入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/

10-11 22:44
查看更多