我正在创建一个PHP脚本,将一些数据从文本文件导入MySQL数据库。这些文本文件非常大,平均文件中有10,000行,每行对应一个我想要的新项目。 (我不会经常导入文件)
我担心从文件中读取一行,然后连续执行10,000次INSERT查询可能会导致一些问题。我有更好的方法吗?我应该使用所有10,000个值执行一个INSERT查询吗?或者那会一样糟糕吗?
也许我可以达到一种媒介,并一次执行10或100个条目。真的我的问题是我不知道什么是好习惯。也许连续10,000次查询都没问题,我只是无所事事。
有什么建议吗?
答案 0 :(得分:6)
是的
<?php
$lines = file('file.txt');
$count = count($lines);
$i = 0;
$query = "INSERT INTO table VALUES ";
foreach($lines as $line){
$i++;
if ($count == $i) {
$query .= "('".$line."')";
}
else{
$query .= "('".$line."'),";
}
}
echo $query;
http://sandbox.phpcode.eu/g/5ade4.php
这将生成一个单一查询,这比一行一查询样式快多倍!
答案 1 :(得分:5)
使用 High Performance MySQL 的作者建议的预准备语句。它节省了大量时间(节省了浪费的协议和SQL ASCII代码)。
答案 2 :(得分:2)
我会在一个包含所有值的大型查询中执行此操作。但是,为了确保您确保之前运行START TRANSACTION;
并且之后运行COMMIT;
,以便在执行查询期间出现问题(这是可能的,因为它很可能会运行相当长的时间),数据库不会受到影响。