2017-03-29 113 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