如何提高sql INSERT INTO的速度

时间:2011-04-04 08:28:34

标签: php mysql sql

<?phph
$Q=mysql_query("SELECT case_number,boxes FROM master");
    while($arr=mysql_fetch_array($Q))

    {

             $s=trim($arr['case_number']);

             $noc=trim($arr['boxes']) ;

             $e=($s+$noc-1);


        for($x=$s;$s<=$e;$s++)
            {


                    mysql_query("INSERT INTO master_break (case_number) VALUES('$s')");

                    $x++;




        }

        }?>

5 个答案:

答案 0 :(得分:3)

您可以尝试做的一件事是批量插入。 Insert syntax支持以下内容:

INSERT INTO master_break (case_number) VALUES (123), (456), ...

尝试使用越来越高的批量大小,直到找到适合自己的东西。

答案 1 :(得分:2)

您可以在手册中阅读相关内容,尤其是有关insert....selectdelayedmultiple row inserts以及禁用/启用密钥的内容。

答案 2 :(得分:1)

Insert into master_break(case_number) 
(select case_number from master)

如果您只需要唯一的,请添加DISTINCT:

   Insert into master_break(case_number) 
    (select distinct case_number from master)

答案 3 :(得分:0)

使所有插入在一个事务中显着加快时间。

mysql_query('START TRANSACTION', $link); 
for ($i = 0; $i < 20; ++$i) 
{ 
   mysql_query("INSERT INTO master_break (case_number) VALUES('$s')", $link);
}
mysql_query('COMMIT', $link); 

http://www.slideshare.net/jwage/doctrine-2-not-the-same-old-php-orm幻灯片52

答案 4 :(得分:0)

使用预准备语句并将它们全部填入事务中。即:

$pdoHandler->beginTransaction();
for (whatever) {
    $query = $pdoHandler->prepare(whatever);
    $query->bindParam(whatever);
    $query->execute();
}
try {
    $pdoHandler->commit();
} catch(PDOException $e) {
    do whatever;
}

这样,你也可以安全地接受SQL注入。