有没有一种很好的方法来删除很多记录而不会减慢网站的速度?
我需要从没有索引和主键的MySQL表中删除数百万条记录。我阅读了SO和网上的各种教程,基本策略是限制删除查询,在删除之间休眠一两秒钟,然后重复此过程直至完成。我也(使用PDO)在完成所有循环后运行提交。
上周工作正常,但每次我运行脚本时,数据库都放慢了速度,我们收到很多关于网站速度缓慢的抱怨等。这是在Miva Merchant篮子表上,并不是真的很重要。
我几乎完成了桌子的修整工作,所以我可以通过它完成。但是一定有更好的办法......?
这里是相关的代码:
$database->beginTransaction();
$selectLimit = 4900; // mysql will lock the entire table at 5000+.....
$loopLimit = 10;
$date = "1456272001"; // 2016-02-24
for( $i = 0; $i < $loopLimit; $i++ ) {
$startTime = time();
$oldBaskets = $database->prepare("DELETE FROM s01_Baskets WHERE CAST(lastupdate AS UNSIGNED) < '" . $date . "' LIMIT " . $selectLimit . "");
if ( $oldBaskets->execute() ) {
$deletes = $oldBaskets->rowCount();
$totalDeletes += $deletes;
$duration = time() - $startTime;
echo "\ndeleted '" . $deletes . "' entries";
echo "\n-- took '" . $duration . "' seconds";
}
sleep(2);
}
$database->commit();