-1

我无法删除大表中的许多行。我正在尝试从 2m 行表中删除 200-300k 行。

我的 PHP 脚本是这样的

    for($i=0;$i<1000;$i++){
    $query="delete from record_table limit 100";
    $queryres=mysql_query($query) or die(mysql_error());;
}

这只是我的脚本的一个示例,我将一次删除 100 行,运行 1000 次以删除 10 万条记录。

但是,PHP 脚本似乎一直在运行,并且没有返回任何内容。但是当我尝试从命令行运行查询时,它似乎删除得很好,尽管删除大约需要 5-6 分钟。

是否有其他东西阻止 PHP 脚本执行查询?我尝试在一个查询中删除 100k,结果也一样。

我真正想运行的查询是“DELETE FROM table WHERE (timeinlong BETWEEN 'timefrom' AND 'timeto'”

timeinlong 列已编入索引。

4

3 回答 3

0

希望您有一个 ID 字段,以便您可以执行以下操作:

 $delete = mysql_query("DELETE FROM records WHERE id > 1000");

这将留下前 1,000 行并删除所有其他条目。

于 2012-12-17T04:54:36.253 回答
0

为什么要多次使用循环删除它不是删除的好方法。如果您有任何 id(自动递增),则将其与 where 子句一起使用(例如,从record_tablewhere id< 任何 ID 中删除)

或者,如果您想通过循环删除它,那么很长一段时间您还应该使用 set_time_limit(0) 函数来保持 PHP 脚本的执行。

于 2012-12-17T04:56:43.053 回答
0

也许添加一个字段来跟踪已删除的项目对您有用。然后,您将“已删除”更新为 TRUE,而不是实际删除行。显然,您的其他查询需要修改以选择删除等于 FALSE 的位置。但它很快。然后您可以在其他时间通过脚本修剪数据库。

于 2012-12-17T14:52:57.623 回答