计数并删除具有十亿行的表中的重复项数

时间:2019-10-18 19:40:45

标签: sql sql-server tsql

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

然后,如果可能,我需要按块将其删除。

此表有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.SORT临时运行存储分配空间:   数据库'tempdb'中的141881590939648',因为'PRIMARY'文件组   已满。通过删除不需要的文件来创建磁盘空间,删除   文件组中的对象,将其他文件添加到文件组,或   为文件组中的现有文件设置自动增长

这要花很多时间,并且会因tempdb错误而失败。

2 个答案:

答案 0 :(得分:0)

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

sudo <path-to-james>/bin/run.sh
ERROR: JAVA_HOME not found in your environment.

如果在处理大数据时出错,请使用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 并运行此代码使其倍增,以每次删除一些额外的记录。

答案 1 :(得分:0)

我使用了以下

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

花几个小时运行,因为该表具有数十亿条记录。