我有两个表,每个表有160k +行。两者之间的一些UUID是共享的。我正在使用foreach循环遍历“new”表,其中嵌入的foreach搜索“旧”表。当UUID匹配结束时,“旧”表将使用“新”表中的数据进行更新。
两个表都有ID的索引。
我的问题是这个操作极其耗时;有没有人知道更有效的方法来搜索匹配的UUID?旁注:我们正在使用MySQL 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);
提前谢谢。
答案 0 :(得分:3)
在SQL中执行此操作。
我的代码中没有任何内容需要PHP。
UPDATE
允许JOIN
。 JOIN
新和旧表,并使您的WHERE
条件与您的说明相匹配。应该非常简单,速度要快得多。
答案 1 :(得分:1)
这可以提高搜索速度
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,以获得...的速度
一些方法在课堂上,你可以轻松地写主题......