zoukankan      html  css  js  c++  java
  • SQL删除数据(分段实现大量数据的删除操作)

    1。当删除的数据量比较少时(万条数据以下):使用普通的数据删除方法即可,delete from .....

    2。当数据量很大时,如果使用一般的删除办法将会出现很多的问题,比如服务器超时、ODBC错误等等;此时我们需要改变删除的方法,可以使用分段的形式进行数据删除,而不是一下子全部删除。

    SET rowcount 5000
    delete from collectiontext where
    cltextid not in
       (
           select min(cltextid)
            from collectiontext group by urladdr
    )

    while @@rowcount>0
    begin
       delete from collectiontext where
    cltextid not in
       (
           select min(cltextid)
            from collectiontext group by urladdr
    )
    end
    set rowcount 0
    也可以写成:

    DECLARE @COUNT AS BIGINT;
    SET @COUNT=1;

    WHILE(@COUNT>0)
    BEGIN
      SET rowcount  3000
      delete  from collectiontext where cltextid not in
      (
        select min(cltextid) from collectiontext group by urladdr
      )
      SET @COUNT=@@ROWCOUNT;
      --SET @COUNT=@COUNT-1;
    END
    --重置rowcount=0
    set rowcount 0

    3、使用TRUNCATE TABLE 清空数据,清空之间用临时表保存要留下的数据记录,然后再放回表中。

    但是TRUNCATE处理的表不能和其他表有外键引用的关系,否则不能实现。

    最后,实现不行的话,还可以利用数据库管理工具自带的数据导出功能将符合要求的数据先导出到某个文件,然后将整个表删除再新建一个一样结构的表,最后将刚才导出的数据导入到新建的表中。

  • 相关阅读:
    Spring Boot 配置加载顺序详解
    JVM总结篇
    nginx负载均衡的策略
    布隆过滤器的方式解决缓存穿透问题
    Spring Cloud Eureka自我保护机制(服务无法剔除)
    缓存穿透,缓存击穿,缓存雪崩解决方案分析
    高并发秒杀系统总结
    Linux环境进程间通信(一)
    HDU 1695 GCD(容斥定理)
    数据结构精要------冒泡与直接排序算法
  • 原文地址:https://www.cnblogs.com/wintergrass/p/1789016.html
Copyright © 2011-2022 走看看