【发布时间】:2014-10-30 08:30:40
【问题描述】:
我正在将数据从一个数据库传输到另一个数据库。它们是不同的数据库(mssql 到 mysql),所以我不能直接查询,而是使用 PHP 作为中介。考虑以下代码。出于某种原因,每次它通过 while 循环所花费的时间是前一次的两倍。
$continue = true;
$limit = 20000;
while($continue){
$i = 0;
$imp->endTimer();
$imp->startTimer("Fetching Apps");
$qry = "THIS IS A BASIC SELECT QUERY";
$data = $imp->src->dbQuery($qry, array(), PDO::FETCH_ASSOC);
$inserts = array();
$continue = (count($data) == $limit);
$imp->endTimer();
$imp->startTimer("Processing Apps " . memory_get_usage() );
if($data == false){
$continue = false;
}
else{
foreach($data AS $row){
// THERE IS SOME EXTREMELY BASIC IF STATEMENTS HERE
$inserts[] = array(
"paymentID"=>$paymentID,
"ticketID"=>$ticketID,
"applicationLink"=>$row{'ApplicationID'},
"paymentLink"=>(int)($paymentLink),
"ticketLink"=>(int)($ticketLink),
"dateApplied"=>$row{'AddDate'},
"appliedBy"=>$adderID,
"appliedAmount"=>$amount,
"officeID"=>$imp->officeID,
"customerID"=>-1,
"taxCollected"=>0
);
$i++;
$minID = $row{'ApplicationID'};
}
}
$imp->endTimer();
$imp->startTimer("Inserting $i Apps");
if(count($inserts) > 0){
$imp->dest->dbBulkInsert("appliedPayments", $inserts);
}
unset($data);
unset($inserts);
echo "Inserted $i Apps<BR>";
}
我设置的限制无关紧要,处理部分每次需要两倍的时间。我正在记录循环的每一部分,并从旧数据库中选择数据并将其插入新数据库中,这完全不需要时间。 “处理部分”每次都翻倍。为什么?这是日志,如果您对时间戳进行一些快速数学计算,标记为“处理应用程序”的每个步骤所花费的时间是之前的两倍......(我在这一步上稍早停止了它,但它花费了显着最后一次迭代的时间更长)
【问题讨论】:
标签: php mysql sql-server performance