计算并删除包含十亿行的表中的重复项数



我需要知道一个有十亿行的表中有多少重复行

然后,如果可能的话,我需要按块删除这些内容。

这个表有 32 列,我想检查所有 32 列中是否有任何具有相同值的重复行。

我试过 1(

SELECT COUNT(*) FROM (
SELECT COLUUMN1,COLUMN2,COLUMN3....COLOUMN32 ,COUNT(*)
FROM TABLE 
GROUP BY 
COLUUMN1,COLUMN2,COLUMN3....COLOUMN32
HAVING COUNT(*)>1)

和 2(

我也尝试过ROW_NUMBER

无法为对象 'dbo 分配空间。对临时运行存储进行排序: 141881590939648"在数据库"tempdb"中,因为"主"文件组 已满。通过删除不需要的文件来创建磁盘空间,删除 文件组中的对象,向文件组添加其他文件,或 为文件组中的现有文件设置自动增长

这需要很长时间,并且会失败并出现 tempdb 错误。

我使用了下面的

SELECT -COUNT_BIG(*) Dup
into #T
FROM (
SELECT DISTINCT Table.*
FROM Table
) X
Insert into #T
SELECT COUNT_BIG(*)
FROM Table
SELECT SUM(DUP)
FROM #T
DROP TABLE #T

运行了几个小时,因为此表有数十亿条记录。

使用此代码删除所有重复的记录,然后为每个不同的记录插入一条记录

SELECT *
INTO #A
FROM TABLE
GROUP BY COLUMN1, COLUMN2, COLUMN3, ... COLOUMN32
HAVING COUNT(*)>1
DELETE T
FROM TABLE AS T
INNER JOIN #A AS A ON T.COLUMN1 = A.COLUMN1 AND T.COLUMN2 = A.COLUMN3 AND ... AND T.COLOUMN32 = A.COLOUMN32
INSERT INTO TABLE
SELECT *
FROM #A
DROP TABLE #A

如果遇到大数据错误,请使用SELECT TOP(10000) * INTO #A并运行此代码,每次都运行多个 this 以删除一些额外的记录。

最新更新