我有一百万行表。我需要删除所有具有某个列的行,这些行等于15k长列表中的一个值。
现在我把它设置为:
$list = array(
"Item1",
...
"Item15000"
);
foreach ($list as $item){
$sql = "Delete from table where `item`='$item'";
if ($con->query($sql) === TRUE) {
echo "$item removed from table <br>";
} else {
echo "Error removing $item from shop_meta: " . $con->error . "<br>";
}
}
在目前的状态下,它需要花费很多时间才能完成,而且我必须为许多其他类似的表做这件事。
如何加快速度或优化查询?有没有办法一次性查询它们以更快地完成它?
答案 0 :(得分:1)
将这些15k列表放入表中,然后加入其中
Delete t
from your_table t
join temp_table tt on t.item = tt.delete_value
答案 1 :(得分:1)
计划A:
DELETE FROM t WHERE item IN (...long list of ids...)
B计划:
计划A,但是要有1000个ID。这对其他用户和复制(如果相关)更友好。建议使用autocommit=ON
运行。
More tips关于重大删除。