zoukankan      html  css  js  c++  java
  • msqlserver 千万级别单表数据去掉重复记录使用临时表

    由于上周末小写把数据数据重复写入数据库,没办法,得去重!

    最新使用的语句:

    use data

     set nocount on
    delete DoRecordProperty from
    (

    select TID,SN,COUNT(0) as num,Max(id) as maxid from DoRecordProperty with (nolock) group by TID,SN having count(0)>1

    ) p where p.TID=DoRecordProperty.TID and p.SN=DoRecordProperty.SN and DoRecordProperty.Id<>p.maxid

    set nocount off

    语句执行了5分钟,还没有出结果,再执行下去,估计也没有结果。

    如果单独执行

    select TID,SN,COUNT(0) as num,Max(id) as maxid from DoRecordProperty with (nolock) group by TID,SN having count(0)>1

    9秒钟就查询出来结果了。

    于是想是否把重复的数据放在临时表里,然后再删除,效果会如何呢?

    于是有了下面的语句

    use data
    go

    set nocount on

    create table #Tmp --创建临时表#Tmp
    (
        TID int ,
        SN varchar(50),
        maxid int ,
        num int
    );

    insert into #Tmp(TID,SN,num,maxid)
    select TID,SN,COUNT(0) as num,Max(id) as maxid from DoRecordProperty with (nolock) group by TID,SN having count(0)>1

    delete DoRecordProperty from
    #Tmp p where p.TID=DoRecordProperty.TID and p.SN=DoRecordProperty.SN and DoRecordProperty.Id<>p.maxid

    Select COUNT(0) as num from #Tmp --查询临时表的数据
    truncate table #Tmp --清空临时表的所有数据和约束
    drop table #Tmp
    set nocount off

    果然,在40秒的时候,执行成功了。

    以上是在服务器:CPU 2u E5-2620  ;内存 96G 硬盘是1T 企业级 7200转;数据是sql server 2008上进行操作的。

  • 相关阅读:
    MVC中单选按钮的实现
    前端点击手机号码跳转到手机拨号页面
    jQuery限制文本框只能输入正整数
    Asp.Net 之 二维码生成
    MVC +Jqyery+Ajax 实现弹出层提醒
    jQuery Ajax使用实例
    ASP的调试技术解答
    模式应用场景
    redis笔记
    yii resful
  • 原文地址:https://www.cnblogs.com/wdkshy/p/5366472.html
Copyright © 2011-2022 走看看