<?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++;
}
}?>
2
A
回答
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
3
有一兩件事你可以嘗試做的是批量插入。 Insert syntax支持類似:
INSERT INTO master_break (case_number) VALUES (123), (456), ...
與越來越高的批量嘗試,直到你找到適合你的。
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)
+0
唯一明智的答案。這裏不需要使用慢循環。 (但是選擇周圍的括號不是必需的) – 2013-02-15 23:25:03
2
您可以在手冊中讀到這一點 - 尤其是,東西約insert....select,delayed,multiple row inserts,和禁用/啓用鍵。
0
使用準備好的語句並將它們全部填入事務中。即:
$pdoHandler->beginTransaction();
for (whatever) {
$query = $pdoHandler->prepare(whatever);
$query->bindParam(whatever);
$query->execute();
}
try {
$pdoHandler->commit();
} catch(PDOException $e) {
do whatever;
}
這樣,你就可以安全地從SQL注入。
這段代碼應該做什麼? – cairnz 2011-04-04 08:30:05
我有兩個表稱爲master和master_break。主表包含名爲case_number和框的字段..我需要使用主值創建master_break表... 此查詢消耗更多時間和內存。如何提高執行速度 – tharindu 2011-04-04 08:35:51