当我尝试在大表上创建唯一索引时,出现了唯一的约束错误。在这种情况下,唯一索引是4列的复合键。

除了以下以外,是否有一种有效的方法来识别重复项:

select col1, col2, col3, col4, count(*)
from Table1
group by col1, col2, col3, col4
having count(*) > 1

上面的说明计划以极高的成本显示了全表扫描,并且只想查找是否还有另一种方法。

谢谢 !

最佳答案

首先尝试在这四列上创建非唯一索引。这将花费O(n log n)的时间,但也将减少将select执行为O(n log n)所需的时间。

您在这里有点束缚-对其进行切片的任何方式,都必须至少读取一次整个表。除非查询优化器足够聪明来构建临时索引/表,否则,朴素算法的运行时间为O(n2)。

关于oracle - Oracle : Identifying duplicates in a table without index,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2495552/

10-12 04:06
查看更多