DELETE
FROM "table"
WHERE "RowID" NOT IN (SELECT MAX("RowID")
FROM "table"
GROUP BY
"aaa",
"bbb",
"ccc"
HAVING COUNT(*) >= 1);
很普通的一条去重复语句,但是当数据量大时(两三万条记录),执行时间要几个小时,但这时执行括号内的查询很快
求优化方案
------解决思路----------------------
sql逻辑没问题,not in确实效率会低,考虑换成not exists试试,另外按照你的描述,select很快,delete很慢,如果差距真的很大,可以考虑用存储过程,开游标查询,然后根据rowid循环删除,应该会比现在的直接delete快。
------解决思路----------------------
试试这个
delete from table
where rowid in (select aa
from (select rowid aa,
row_number() over(partition by aaa, bbb, ccc order by a.aaa desc) rn,
a.*
from table a
)
where rn > 1);