无法更新超过10000条记录的mysql表

时间:2010-09-21 22:36:32

标签: php mysql

我的代码在这里

$query = "SELECT * FROM `table`";
$result = mysql_query($query);
 $arr = array();
 while($info = mysql_fetch_array($result)) {

 if (!in_array($info['row'], $arr)) {
 $arr[] = $info['row'];
 }
 }

foreach ($arr as $v) {
 $pass = "pass";
$query2 = "UPDATE `table` SET pass = '$pass'  WHERE row = '$v'";
$result2 = mysql_query($query2);
}

它处理2分钟,db中没有任何反应。哪里可能是错的?

由于

编辑:好的,我发现了我的错误。这是关于我为生成随机传递而编写的代码,我没有在我的问题中包含这些代码。谢谢大家你

1 个答案:

答案 0 :(得分:1)

一种可能性是内存不足:通过将所有行存储在一个数组中,在进入更新部分之前需要大量内存 - 在这种情况下,这完全解释了为什么你看不到变化;脚本永远不会到达那个部分。

另一种可能性是您的脚本runs for too long已停止。根据您的服务器配置,set_time_limit可能是一种选择。

但是,您在此处向我们展示的脚本的效果与此单个查询完全相同:

UPDATE `table` SET pass = 'pass'

因为你对select中的行没有条件,你所做的唯一过滤是不在行列中存储具有相同值的多行 - 但是当你到达更新过程时,你会识别每一行行通过行列,这意味着它将更新行列中具有相同值的所有行。如果每行的行值都是唯一的,那么就不需要检查是否已经看过该行;如果它不是唯一的,那么在更新时你需要一个不同的标准。

如果直接运行更新,PHP将不需要使用大量内存,MySQL不必在更新期间搜索每一行;它可以一次性迭代它们。除非你在这里留下一些东西,否则你只需做一个简单的查询就会好得多。