从相当大的 SQL Server 表(即 300,000+ 行)中删除重复行的最佳方法是什么?
SQL Server
RowID当然,由于标识字段的存在,这些行不会是完美的重复。
RowID
我的表
RowID int not null identity(1,1) primary key, Col1 varchar(20) not null, Col2 varchar(2048) not null, Col3 tinyint not null
假设没有空值,您GROUP BY将使用唯一列,并将SELECTRowIdMIN (or MAX)作为要保留的行。然后,只需删除没有行 id 的所有内容:
GROUP BY
SELECT
MIN (or MAX)
DELETE FROM MyTable LEFT OUTER JOIN ( SELECT MIN(RowId) as RowId, Col1, Col2, Col3 FROM MyTable GROUP BY Col1, Col2, Col3 ) as KeepRows ON MyTable.RowId = KeepRows.RowId WHERE KeepRows.RowId IS NULL
如果您有 GUID 而不是整数,则可以替换
MIN(RowId)
和
CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))