ORACLE删除重复记录求优化
0
DELETE
FROM "table"
WHERE "RowID" NOT IN (SELECT MAX("RowID")
FROM "table"
GROUP BY
"aaa",
"bbb",
"ccc"
HAVING COUNT(*) >= 1);
很普通的一条去重复语句,但是当数据量大时(两三万条记录),执行时间要几个小时,但这时执行括号内的查询很快
求优化方案
FROM "table"
WHERE "RowID" NOT IN (SELECT MAX("RowID")
FROM "table"
GROUP BY
"aaa",
"bbb",
"ccc"
HAVING COUNT(*) >= 1);
很普通的一条去重复语句,但是当数据量大时(两三万条记录),执行时间要几个小时,但这时执行括号内的查询很快
求优化方案
没有找到相关结果
重要提示:提问者不能发表回复,可以通过评论与回答者沟通,沟通后可以通过编辑功能完善问题描述,以便后续其他人能够更容易理解问题.
2 个回复
老头子 - 专注是唯一的捷径 2015-10-22 回答
赞同来自: yuzhouhuo2010
2、3w的数据量不大
还有最好不要group by那几个字段
DELETE
FROM "table"
WHERE "RowID" NOT IN (SELECT MAX("RowID")
FROM "table"
GROUP BY
"aaa",
"bbb",
"ccc"
HAVING COUNT(*) >= 1);
可以把group by换成表关联,group by 和 having 效率较低。
DELETE
FROM "table" a
WHERE "RowID" NOT IN (SELECT MAX("RowID")
FROM "table" b
where a.aaa = b.aaa and
a.bbb = b.bbb and
a.ccc = b.ccc
);
ps: 在关联的时候注意对空值的处理
seng - 从事BI、大数据、数据分析工作 2015-10-22 回答
赞同来自: