8

我正在创建一个 PHP 脚本,它将文本文件中的一些数据导入 MySQL 数据库。这些文本文件非常大,一个平均文件将有 10,000 行,每行对应于我想要在我的数据库中的一个新项目。(我不会经常导入文件)

我担心从文件中读取一行,然后执行 INSERT 查询,连续 10,000 次可能会导致一些问题。我有更好的方法吗?我应该对所有 10,000 个值执行一次 INSERT 查询吗?还是会一样糟糕?

也许我可以达到一个媒介,一次执行 10 或 100 个条目。真的我的问题是我不知道什么是好的做法。也许连续 10,000 个查询很好,我只是担心什么。

有什么建议么?

4

3 回答 3

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

这将进行一次查询,比单行一查询方式快多个!

于 2011-07-23T23:41:58.263 回答
5

使用High Performance MySQL的作者建议的预处理语句。它节省了大量时间(节省了浪费的协议和 SQL ASCII 代码)。

于 2011-07-24T00:00:10.657 回答
2

我会在一次包含所有值的大型查询中执行此操作。不过,为了确保您在START TRANSACTION;之前和COMMIT;之后运行,这样如果在查询执行期间出现问题(这是可能的,因为它很可能会运行相当长的时间),数据库将不会做作的。

于 2011-07-23T23:37:31.377 回答