这是我的问题:
DELETE FROM my_table WHERE name = ANY (
SELECT name FROM (
SELECT sd1.name
FROM my_table sd1 JOIN my_table sd2
ON sd2.name > sd1.name
AND sd2.name & sd1.name = sd1.name
AND sd1.number >= sd2.number) AS stmp
);
name是主键BIGINT类型。
即使my_table中没有那么多行,也需要很长时间才能运行。 关于如何让它运行得更快的任何想法。
答案 0 :(得分:1)
您正在寻找sd1.names,其中存在具有特定条件的另一条记录。然后删除所有找到名称的记录。
这不是简单的:删除哪些记录存在具有特定条件的另一条记录?
DELETE FROM my_table
WHERE EXISTS
(
SELECT *
FROM
(
SELECT *
FROM my_table sd2
WHERE sd2.name > my_table.name
AND sd2.name & my_table.name = my_table.name
AND my_table.number >= sd2.number
) dummy
);
(更新: MySQL无法访问UPDATE
或DELETE
中的同一个表,并且必须包装子查询,以便表格隐藏一层隐藏的更深层次。绝对没有意义,但应该解决这个问题。希望它能。)
那不那么复杂,因此可能更快。特别是因为EXISTS
必须在每个主记录中只找到一个匹配并且可以在那里停止,而联接则查找所有匹配。
答案 1 :(得分:0)
显然你可以用INNER JOIN http://www.mysqltutorial.org/mysql-delete-join/削减DELETE 如果JOIN很大,它仍然需要一段时间。