我有两个表,每个表有160k+行。在两者之间共享一些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);
提前谢谢。
在SQL中完成这一切。
我在您的代码中没有看到任何需要PHP的东西。
CCD_ 1允许CCD_。JOIN
是新和旧表,并使您的WHERE
条件与您的描述相匹配。应该非常简单而且速度明显更快。
几个月前我写了一个函数
您可以根据需要对其进行修改。
这可以提高搜索的速度
public static function search($query)
{
$result = array();
$all = custom_query::getNumRows("bar");
$quarter = floor(0.25 * $all) + 1;
$all = 0;
for($i = 0;$i<4;$i++)
{
custom_query::condition("", "limit $all, $quarter");
$data = custom_query::FetchAll("bar");
foreach ($data as $v)
foreach($v as $_v)
if (count(explode($query, $_v)) > 1)
$result[] = $v["bar_id"];
$all += $quarter;
}
return $result;
}
它会返回搜索匹配的记录的ID。
这种方法将表格划分为4个部分,每次迭代只得到其中的四分之一…
您可以将此数字更改为例如10或20,表示速度为
一些方法在课堂上,你可以很容易地写主题。。。