我在删除大表中的许多行时遇到问题。我试图从2米行表中删除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次以删除100k记录。
但是,PHP脚本似乎永远保持运行而不返回任何内容。 但是当我尝试从命令行运行查询时,它似乎删除就好了,虽然删除大约需要5-6分钟。
是否还有其他阻止PHP脚本执行查询的内容?我尝试在一个查询中删除100k,结果也一样。
我真正想要运行的查询是“DELETE FROM table WHERE(timeinlong BETWEEN'time from'AND'timeto'”
将timeinlong列编入索引。
答案 0 :(得分:0)
希望你有一个ID字段,所以你可以这样做:
$delete = mysql_query("DELETE FROM records WHERE id > 1000");
这将留下前1,000行并删除所有其他条目。
答案 1 :(得分:0)
为什么要多次使用循环删除它不是一个好的删除方法。如果您有任何id(自动递增),则将其与where子句一起使用
(例如从record_table
中删除其中id&lt; any ID)
或者如果你想用循环删除它,那么你也应该使用set_time_limit(0)函数来保持PHP脚本的执行。
答案 2 :(得分:0)
也许添加字段来跟踪已删除的项目对您有用。然后,不是实际删除行,而是将“已删除”更新为TRUE。显然,您需要修改其他查询以选择已删除等于FALSE的位置。但它很快。然后你可以在其他时间通过脚本修剪数据库。