【发布时间】:2013-06-13 20:22:26
【问题描述】:
我有一个包含 4,000 行的 .txt 文件,我正在尝试将它们插入到 mysql 中,这里有两种方法可以做同样的事情,第一种方法很简单,编码如下:
$start = microtime(true);
foreach($b as $k=>$v){//$b is an array of 4,000 elements
$db->exec("INSERT INTO siji (en,cn) VALUES ('$v[0]','$v[1]')");
}
echo microtime(true)-$start;//116 sec.
需要 116 秒。第二种方法是使用 PDO::bindParam(),我知道对于重复的 SQL 查询,使用 bindparam() 是一个好习惯,因为每个查询之间的唯一区别是它们的值,所以我编码如下:
$start = microtime(true);
$stmt = $db->prepare('INSERT INTO siji (en,cn) VALUES (:en,:cn)');
$stmt->bindParam(':en',$en);
$stmt->bindParam(':cn',$cn);
foreach($b as $k=>$v){//$b is an array of 4,000 elements
$en = $v[0];
$cn = $v[1];
$stmt->execute();//
}
echo microtime(true)-$start;//127 sec.
第二种方法被认为比第一种更快,结果不是我想的那样,谁能告诉我 bindparam() 真的可以加快批量插入吗?或者使用时可能有什么问题绑定参数()?
【问题讨论】:
-
考虑使用 PDO 事务:php.net/manual/en/pdo.begintransaction.php
标签: php pdo sqlbindparameter