1. 选择候选键,60个字段,应该只用其中几个就可以判断重复了吧。
在候选键的这些字段上建立索引。
2.
CREATE TRIGGER tr_历史交易表
ON 历史交易表
FOR DELETE
AS
INSERT INTO 历史交易表
SELECT DISTINCT * FROM deleted
GO
DELETE 历史交易表
FROM (
SELECT 候选键1, 候选键2, 候选键3
FROM 历史交易表
GROUP BY 候选键1, 候选键2, 候选键3
HAVING COUNT(*) > 1
) t
INNER JOIN 历史交易表 a
ON t.候选键1 = a.候选键1
AND t.候选键2 = a.候选键2
AND t.候选键3 = a.候选键3
1、先确定重复记录所在的时间范围,这样可以缩小一定的数据量。
2、将1KW条记录分散成几个部份,逐个部份剔除复地。每个部份剔除完成后,然后再一部份一个部份的合并。合并的同时再次剔除重复地。这样,即不影响你正常使用,还可以完成工作。
2.还可以是这样:
SELECT DISTINCT a.*
INTO #T
FROM (
SELECT 候选键1, 候选键2, 候选键3
FROM 历史交易表
GROUP BY 候选键1, 候选键2, 候选键3
HAVING COUNT(*) > 1
) t
INNER JOIN 历史交易表 a
ON t.候选键1 = a.候选键1
AND t.候选键2 = a.候选键2
AND t.候选键3 = a.候选键3
DELETE 历史交易表
FROM (
SELECT 候选键1, 候选键2, 候选键3
FROM 历史交易表
GROUP BY 候选键1, 候选键2, 候选键3
HAVING COUNT(*) > 1
) t
INNER JOIN 历史交易表 a
ON t.候选键1 = a.候选键1
AND t.候选键2 = a.候选键2
AND t.候选键3 = a.候选键3
INSERT INTO 历史交易表
SELECT * FROM #T