それぞれ160k以上の行を持つ2つのテーブルがあります。2 つの間でいくつかの UUID が共有されます。私は、「古い」テーブルを検索する foreach が埋め込まれた「新しい」テーブルに対して foreach ループを使用しています。UUID の一致がなくなると、「古い」テーブルが「新しい」テーブルのデータで更新されます。
両方のテーブルの ID にインデックスがあります。
私の問題は、この操作が非常に時間がかかることです。一致するUUIDを検索するためのより効率的な方法を知っている人はいますか? 補足: PHP 5.3 の MySQLi 拡張機能を使用しています。
Exp コード:
$oldCounter = 0;
$newCounter = 1;
//loop
foreach( $accounts as $accKey=>$accValue )
{
echo( "New ID - " . $oldCounter++ . ": " . $accValue['id'] . "\n" );
foreach( $accountContactData as $acdKey=>$acdValue )
{
echo( "Old ID - " $newCounter++ . ": " . $acdValue['id'] . " \n" );
if( $accValue['id'] == $acdValue['id'] && (
$accValue['phone_office'] == "" || $accValue['phone_office'] == NULL || $accValue['phone_office'] == 0 )
){
echo("ID match found\n");
//when match found update accounts with accountsContact info
$query = '
UPDATE `accounts`
SET
`phone_fax` = "' . $acdValue['fax'] . '",
`phone_office` = "' . $acdValue['telephone1'] . '",
`phone_alternate` = "' . $acdValue['telephone2'] . '"
WHERE
`id` = "' . $acdValue['id'] . '"
';
echo "" . $query . "\n\n";
$DB->query($query);
break 1;
}
}
}
unset($oldCounter);
unset($newCounter);
前もって感謝します。