我应该限制或减少数据库查询吗?

时间:2011-07-23 23:33:35

标签: php mysql database rate-limiting

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

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

也许我可以达到一种媒介,并一次执行10或100个条目。真的我的问题是我不知道什么是好习惯。也许连续10,000次查询都没问题,我只是无所事事。

有什么建议吗?

3 个答案:

答案 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;,以便在执行查询期间出现问题(这是可能的,因为它很可能会运行相当长的时间),数据库不会受到影响。