我有一个相当大的数据集(大约1000万行),有很多重复数据。要删除这些重复项,我使用此查询(来自this post - 我理解为最有效):
;WITH cte
AS (SELECT ROW_NUMBER() OVER (PARTITION BY COL1, COL2, COL3
ORDER BY ( SELECT 0)) RN
FROM MYTABLE)
DELETE FROM cte
WHERE RN > 1
服务器返回此错误:
数据库'ABC'的事务日志已满。要找出无法重用日志中的空间的原因,请参阅sys.databases中的log_reuse_wait_desc列
如何解决此问题并删除重复的行?
答案 0 :(得分:0)
长期存在的问题。 DELETE是一个记录的操作,过去的经验告诉我,当删除大量数据时,日志可能会比数据文件大。一个好的解决方案,但在所有情况下都不适用,是将要保留的数据复制到新表中,删除原始表,然后将新表重命名为原始表。显然,在未使用数据库的维护期间,必须这样做。
嘿Microsoft:未记录的DELETE
怎么样