zoukankan      html  css  js  c++  java
  • SQL2008删除大量数据

    常见问题:工作中数据库难免产生大量的日志,而用户可能关心的只有最近一个月左右的,这些日志占用了服务器磁盘,还可能影响了服务运行效率。甚至在数据库迁移时更因为体积而带来巨大麻烦。

    那么,在需要时,删除不再关注的日志,就很必要。

    解决思路:肯定第一反应是想delete,可实际操作的人都知道,这个效率。。

        我第二反应是重新建表,drop和create,但所有数据都会删掉。

           然后就想要不就把最近的数据插入一个表,再执行drop和create,再插入回新表。。似乎可行。。

      接着网上去搜索。。。然后找到博客园 舍长 的帖子: http://www.cnblogs.com/panchunting/archive/2013/04/27/SQL_Tech_001.html.差不多按他最后的方法解决的。

    解决方法

       我最后的操作步骤是这样的:  

    --开启日志无限制--手动,还没找对应语句
    
    --第一条语句会把所有要保留的数据先存放至表#keep中(表#keep无需手工创建,由SELECT INTO生效)
    SELECT * INTO #keep FROM EquipmentsLoginLog WHERE WithDrawTime>'2015-09-01'
    --第二条语句用于清除整个表中数据,产生的日志文件基本可以忽略;
    TRUNCATE TABLE EquipmentsLoginLog
    --第三条语句用于还原保留数据。--不查询标识符的id字段
    INSERT into EquipmentsLoginLog ([A],B)
           SELECT    A,B  FROM #keep
    
    --清理产生的日志文件
    DBCC SHRINKDATABASE(TransmitPlatformDB)
    --再手动限制日志大小
    大数据之删除

     小结

    • TRUNCATE太快了,清除10W数据一点没压力,批量删除次之,最后的DELTE太慢了;
    • TRUNCATE快是因为它属于DDL语句,只会产生极少的日志,普通的DELETE不仅会产生日志,而且会锁记录。
  • 相关阅读:
    Spring MVC:框架及其组件介绍
    Goods:生成订单
    Goods:我的订单查询分页
    LeetCode:Kth Largest Element in an Array(need update)
    LeetCode:Swap Nodes in Pairs
    Goods:购物车条目加减数量实现
    LeetCode:Sum Root to Leaf Numbers
    Goods:购物车模块之全选按钮与条目之复选按钮的click事件
    Goods:查询某个用户的购物车条目以及添加购物车条目
    洛谷2387 NOI2014魔法森林(LCT维护最小生成树)
  • 原文地址:https://www.cnblogs.com/dacude/p/4827829.html
Copyright © 2011-2022 走看看