我需要知道一个有十亿行的表中有多少重复行
然后,如果可能,我需要按块将其删除。
此表有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错误而失败。
答案 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
花几个小时运行,因为该表具有数十亿条记录。