热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

千万级数据表中高效去除重复记录的方法与策略

在处理历史交易表时,发现存在部分重复交易记录,需进行数据清理。为解决此问题,考虑构建一个临时表,并采用SQLServerODBC工具进行数据的导入与导出操作,以实现高效去重。此外,建议结合索引优化和批处理技术,进一步提升数据处理效率和系统性能。
于前期的问题,在历史交易表中出现了部分重复交易,现在需要整理该表。   
   我一开始打算建一个临时表,用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   

转:https://www.cnblogs.com/pengxianwei/archive/2008/10/18/1313854.html



推荐阅读
  • 本文深入探讨了 C# 中 `SqlCommand` 和 `SqlDataAdapter` 的核心差异及其应用场景。`SqlCommand` 主要用于执行单一的 SQL 命令,并通过 `DataReader` 获取结果,具有较高的执行效率,但灵活性较低。相比之下,`SqlDataAdapter` 则适用于复杂的数据操作,通过 `DataSet` 提供了更多的数据处理功能,如数据填充、更新和批量操作,更适合需要频繁数据交互的场景。 ... [详细]
  • PHP连接MySQL的三种方法及预处理语句防止SQL注入的技术详解
    PHP连接MySQL的三种方法及预处理语句防止SQL注入的技术详解 ... [详细]
  • 本文将详细介绍如何在SSM框架中无缝集成ShardingSphere 4.10,以实现高效的数据分片和读写分离。通过实例演示和代码解析,帮助开发者快速掌握这一复杂但实用的技术。文章从基础概念入手,逐步深入到具体配置和应用实践,旨在为读者提供一个全面、易懂的整合指南。 ... [详细]
  • 长期以来,关于临时表与表变量的优劣之争一直存在,部分技术社区甚至认为表变量几乎毫无用武之地,如缺乏统计信息、不支持事务处理等。然而,实际情况并非如此绝对。本文将从多个角度对比分析临时表与表变量,探讨它们在不同场景下的应用优势及其潜在局限性,帮助开发者更好地选择合适的数据结构。 ... [详细]
  • MySQL:不仅仅是数据库那么简单
    MySQL不仅是一款高效、可靠的数据库管理系统,它还具备丰富的功能和扩展性,支持多种存储引擎,适用于各种应用场景。从简单的网站开发到复杂的企业级应用,MySQL都能提供强大的数据管理和优化能力,满足不同用户的需求。其开源特性也促进了社区的活跃发展,为技术进步提供了持续动力。 ... [详细]
  • SQL 语句的性能优化:你做到了吗?
    在 SQL Server 查询性能优化中,书签查找的作用不容忽视。本文深入探讨了书签查找对查询效率的影响,并提供了实用的优化策略,帮助开发者提升数据库性能。通过具体案例分析,文章展示了如何有效避免不必要的书签查找,从而显著提高查询速度和系统响应时间。 ... [详细]
  • 深入解析十大经典排序算法:动画演示、原理分析与代码实现
    本文深入探讨了十种经典的排序算法,不仅通过动画直观展示了每种算法的运行过程,还详细解析了其背后的原理与机制,并提供了相应的代码实现,帮助读者全面理解和掌握这些算法的核心要点。 ... [详细]
  • SQL取整函数详解:ROUND四舍五入、FLOOR向下取整与CEILING向上取整的应用与区别 ... [详细]
  • 2016年11月7日周一:Kettle系统监测销售团队每日任务完成情况分析
    本文介绍了2016年11月7日对Kettle系统中销售团队每日任务完成情况的分析。具体包括:目标表中的激活客户数是指当月前30天内未下过单的客户;通过SQL查询语句获取销售员的当月销售确认金额、订单总额、首单数量及激活客户数量等关键指标,以便全面评估销售业绩。 ... [详细]
  • oracle text db2,从Oracle 到DB2(一)
    在实际的软件项目的开发过程中,特别是在企业的应用系统集成(EAI)项目中广大开发人员经常遇到不同关系型数据库之间的数据移植问题。笔者根据自己在工作中的不同数据库数据移 ... [详细]
  • 本文介绍了一种简化版的在线购物车系统,重点探讨了用户登录和购物流程的设计与实现。该系统通过优化界面交互和后端逻辑,提升了用户体验和操作便捷性。具体实现了用户注册、登录验证、商品浏览、加入购物车以及订单提交等功能,旨在为用户提供高效、流畅的购物体验。 ... [详细]
  • 利用ViewComponents在Asp.Net Core中构建高效分页组件
    通过运用 ViewComponents 技术,在 Asp.Net Core 中实现了高效的分页组件开发。本文详细介绍了如何通过创建 `PaginationViewComponent` 类并利用 `HelloWorld.DataContext` 上下文,实现对分页参数的定义与管理,从而提升 Web 应用程序的性能和用户体验。 ... [详细]
  • 在2020年8月19日的深度分析中,我们探讨了HTML标签中同时存在`a`标签的`href`和`onclick`属性时的触发顺序问题。此外,还讨论了如何在一个自适应高度的父级`div`中,使两个子`div`中的一个固定高度为300px,另一个自动填充剩余空间的方法。最后,文章详细介绍了JavaScript异步加载的多种实现方式,包括但不限于`async`、`defer`属性以及动态脚本插入技术,为开发者提供了丰富的技术参考。 ... [详细]
  • 多种实现 Windows 定时自动执行任务的专业技巧与方案
    在Windows系统中,实现定时自动执行任务有多种专业技巧和方案。常见的方法包括:使用Windows任务计划程序、开发Windows服务以及利用SQL Server Agent作业。这些方法被广泛应用于各种自动化场景,多数技术人员对此都有所了解。 ... [详细]
  • 在MFC开发过程中,利用Windows内置的文件对话框可以显著提高文件操作的效率。本文总结了使用文件对话框进行文件选择和处理的经验,详细介绍了相关API的调用方法和参数设置,如`CFileDialog`类的使用、结构体`OPENFILENAME`的配置以及如何获取选中的文件路径。通过这些技巧,开发者可以快速实现文件的打开、保存等功能,提升应用程序的用户体验。 ... [详细]
author-avatar
噯嘅坟墓_996
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有