删除千万级表中重复记录的办法
2008-10-18 02:25
211 查看
于前期的问题,在历史交易表中出现了部分重复交易,现在需要整理该表。
我一开始打算建一个临时表,用sqlserver odbc 导入导出数据的办法使用select distinct * 的语句将数据导入临时表,修改临时表名的办法,在实际操作过程中发现通过语句操作实际上需要将表中的记录先做select 然后写入临时表中,考虑到记录数和机器性能的问题,这种做法可行性不高。
交易表的基本情况是这样的:
每条记录约有60个字段,长度超过1k,
总共记录1000w,重复记录约在5000-10000
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
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
我一开始打算建一个临时表,用sqlserver odbc 导入导出数据的办法使用select distinct * 的语句将数据导入临时表,修改临时表名的办法,在实际操作过程中发现通过语句操作实际上需要将表中的记录先做select 然后写入临时表中,考虑到记录数和机器性能的问题,这种做法可行性不高。
交易表的基本情况是这样的:
每条记录约有60个字段,长度超过1k,
总共记录1000w,重复记录约在5000-10000
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
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
相关文章推荐
- 删除千万级表中重复记录的办法
- 删除千万级表中重复记录的办法
- 千万级数据库(MSSQL)删除重复记录
- oracle中删除表中重复记录常见办法
- 删除重复记录的办法
- 删除mysql重复记录的办法
- 删除mysql重复记录的办法
- 千万级数据库(MSSQL)删除重复记录
- 删除mysql重复记录的办法
- 删除表中重复记录的办法
- DataGrid中删除最后一页的记录时出错的解决办法
- SQL重复记录处理(查找,过滤,删除)
- label自动换行代码和DataGrid中删除最后一页的记录时出错的解决办法以及HTML小TIPS:强制HTML表格断行
- SQL 删除重复记录
- 在SQL Server中快速删除重复记录
- 使用distinct在mysql中查询多条不重复记录值的解决办法
- 如何删除数据库中的重复记录(一)
- Oracle 删除重复的记录,只保留一条
- oracle中查找和删除重复记录的几种方法总结
- SQL查询重复记录的办法