2017-03-29 110 views
1

目前,我使用预处理语句插入一堆用下面的代码行:PHP MySQL的快速插入多行

更新的代码:

$sql = $mysqli->prepare("INSERT INTO `TBLName` (Col1, Col2, Col3) Values(?, ?, ?)"); 
for ($i = 0; $i < 1000; $i++) { 
    $sql->bind_param('sss', $Col1Data, $Col2Data, $Col3Data); 
    $sql->execute(); 
    } 
$sql->close(); 

不过,我已经看到了一篇文章说话关于事务处理速度更快......我可以将事务与准备好的语句结合使用,还是应该以不同的方式使用它?假设我必须在每次脚本运行中插入1000行并且以5秒的间隔触发脚本get,那么最适合我的方式是什么?

+1

旁注:你为什么使用'real_escape_string()'和一个准备好的语句?每次运行时都不需要使用附加的函数/ db调用。 –

+1

你可能想看看这个 http://stackoverflow.com/questions/1176352/pdo-prepared-inserts-multiple-rows-in-single-query – Vini

+0

@ Fred-ii-,你告诉我,用准备好的声明我不必使用real_escape_string函数?你是认真的吗?我猜想,这将会是一场巨大的胜利! –

回答

1

我建议在单个INSERT语句中插入100到1000行。 (我不认为你所提供的代码在没有更多更改的情况下将能够正常工作。)

然后用autocommit=1TRANSACTION做100-1000行。这有利于不占用系统,并且不会收集大量数据以潜在地“撤消”。但是不能自动完成所有行的缺点。

少于100会导致额外的开销;超过1000个的收益递减和其他形式的开销。

100-1000也是复制友好的,而不是占用复制流。

如果您已经有csv文件中的数据,请使用LOAD DATA