具有 60 000 000 条记录的大型 SQL 2008 表,我遇到重复行的问题。
这个命令给了我我的副本 http://support.microsoft.com/kb/139444
SELECT id, sa_trvalue, COUNT(*) AS tot
FROM msanal
GROUP BY id, sa_trvalue
HAVING (COUNT(*) > 1)
但是当我执行这些步骤(INTO 和 DISTINCT)时,我没有足够的内存来完成操作。
最佳答案
您可以尝试这种可能需要更少内存的方法:
WITH CTE AS
(
SELECT id, sa_trvalue,
rn = ROW_NUMBER() OVER (PARTITION BY id, sa_trvalue ORDER BY id ASC)
FROM msanal
)
DELETE FROM CTE WHERE rn > 1
公用表表达式还有一个优点,即您可以轻松修改它以查看要删除的内容。因此,您只需将 DELETE
更改为 SELECT *
。
关于mysql - 大型 SQL 数据库删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19120451/