<?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++;
}
}?>
答案 0 :(得分:3)
您可以尝试做的一件事是批量插入。 Insert syntax支持以下内容:
INSERT INTO master_break (case_number) VALUES (123), (456), ...
尝试使用越来越高的批量大小,直到找到适合自己的东西。
答案 1 :(得分:2)
您可以在手册中阅读相关内容,尤其是有关insert....select,delayed,multiple 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注入。