循环查询越来越慢

Par*_*ney 2 php mysql performance

我有一个逐行读取数据馈送的过程,解析并将数据插入到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' :
        ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

正在解析的当前文件有几百万条记录.服务器似乎没有丢失内存空间.有人知道是什么原因导致这个过程变慢了吗?

Joh*_*ght 6

它可能与必须经常写入索引有关.您已经在使用MyISAM,这将是我的第一个建议.

一些建议

  1. 每100行批量插入
  2. 使用INSERT DELAYED允许MySQL允许插入快速完成排队,MySQL将在资源允许时插入记录.
  3. 让您的脚本创建一个SQL转储/分隔文件,您可以使用IN FILE导入函数加载它,请参阅http://dev.mysql.com/doc/refman/5.1/en/load-data.html,这将比批量插入