在不使用循环 mysql php 的情况下从大型 table 中删除具有不同标识符的多条记录

Delete multiple records with different identifiers from a large table without using loop mysql php

我有一百万行table。我需要删除所有具有特定列等于 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>";
        }

}

在目前的状态下,它需要很多很多小时才能完成,而且我也必须为许多其他类似的 table 完成它。

如何加快或优化查询?有没有一种方法可以一次查询它们以更快地完成它?

将那些 15k 列表放在 table 中,然后加入反对它

Delete t
from your_table t
join temp_table tt on t.item = tt.delete_value

方案A:

DELETE FROM t WHERE item IN (...long list of ids...)

B计划:

执行计划 A,但以 1000 个 ID 为一组。这将对其他用户和复制(如果相关)更友好。建议 运行 autocommit=ON.

More tips 大删除。