PHP / mysql - 检查非常大的表中的重复项导致挂起

时间:2012-06-18 17:49:41

标签: php mysql

我正在尝试检查一个表中的重复项并将其从另一个表中删除。它会永远挂起并最终导致500内部错误。这是我在php中的原始方法:

$sql_2 = "SELECT account_no FROM customersTable";
$result_2 = mysql_query($sql_2) or die("Error: " . mysql_error() . "<br>");
while(list($acct) = mysql_fetch_row($result_2)) {
   $sql_delete = "DELETE FROM tempTable WHERE(account_no = '$acct')";
   $result_delete = mysql_query($sql_delete) or die("Error: " . mysql_error() . "<br>");
}

然后我尝试了以下查询而不是上面的脚本,全部挂起:

DELETE FROM tempTable WHERE account_no IN (SELECT account_no FROM tempTable)

DELETE FROM tempTable USING tempTable, customersTable ct WHERE tempTable.account_no=ct.account_no

这些都挂起20分钟或更长时间,然后最终出现内部服务器错误“请求未完成。服务器遇到意外情况。”

我对任何和所有解决方案都持开放态度,即使是那些不涉及php或涉及缓存,批处理或其他任何需要的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以尝试在MySQL端运行它:

DELETE tempTable 
FROM customersTable
JOIN tempTable
ON customersTable.account_no = tempTable.account_no;