我的表格中有column
“image_url
”的重复条目“现在我想只删除重复项并保留每条记录的一条记录吗?
这是我试过的查询:
DELETE t1
FROM
ad_images_copy t1
JOIN ad_images_copy t2 ON t2.image_url = t1.image_url
AND t2.id < t1.id
reference link for remove duplicate rows
但它给了我error
错误:超出锁定等待超时;尝试重新启动交易
现在我想限制此查询,因为我需要记录很多。
我尝试在最后添加limit
,但它对我不起作用。
DELETE t1
FROM
ad_images_copy t1
JOIN ad_images_copy t2 ON t2.image_url = t1.image_url
AND t2.id < t1.id
limit 100 ;
如果有其他方法可以帮助。
答案 0 :(得分:1)
要检查的一件事是image_url
和id
都在两个表上编入索引。 (可能id
是主键,因此它将被编入索引,但您应该检查image_url
是否已编入索引。)如果没有,请添加索引。
如果是这样,您可以尝试通过两个步骤来避免锁定。你的行是不可变的吗?如果是,那么您可以使用SELECT
查询来查找要删除的所有行,然后使用一些批处理的DELETE
来删除它们。这意味着您不会最终锁定整个表格。
只要您知道您正在查看的行不会在t2
和SELECT
之间移动DELETE
,就可以安全地执行此操作{1}}。