【发布时间】:2011-01-28 21:57:15
【问题描述】:
我有一个进程逐行读取数据馈送,解析数据并将其插入到 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' :
...
}
}
}
当前正在解析的文件有几百万条记录。服务器似乎没有丢失内存空间。有谁知道是什么导致进程变慢?
【问题讨论】:
-
桌子上有索引吗?索引更新可能是罪魁祸首。另外,您多久提交一次?
-
你在'table'上有索引吗?
-
@bensiu & @Jim Garrison - 为什么需要为 INSERT 编制索引?
-
也许你应该发布使用你的架构?
-
@FeRtoll - INSERTS 不需要索引,但如果在执行 INSERT 时表上有索引,则必须重写索引以包含最近插入的记录 - 这将减慢插入过程
标签: php mysql performance