Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > 如何在SQLSERVER中快速有条件删除海量数据
【标  题】:如何在SQLSERVER中快速有条件删除海量数据
【关键字】:SQLSERVER
【来  源】:http://blog.csdn.net/great_domino/archive/2006/03/14/623862.aspx

如何在SQLSERVER中快速有条件删除海量数据

Your Ad Here

        最近有个朋友问我,他说他在SQLSERVER删除几百万到几千万数据是显的很慢,帮他分析了一下,提了一些以下意见,或许对很多人有用,再者也好长没写过BLOG了,一起探讨一下

如果你的硬盘空间小,并且不想设置数据库的日志为最小(因为希望其他正常的日志希望仍然记录),而且对速度要求比较高,并清除所有的数据建议你用turncate table1,因为truncate 是DDL操作,不产生rollback,不写日志速度快一些,然后如果有自增的话,恢复到1开始,而delete会产生rollback,如果删除大数据量的表速度会很慢,同时会占用很多的rollback segments,同时还要记录下G级别的日志 ;当然如果有条件删除比如where time<'2006-3-10' 怎么办,能不能不记录日志用delete,回答是不行的,SQL Server 引擎在设计上就会对 Delete 操作进行日志记录。至今没有办法强制制定某一些语句不记录到日志中,如果在执行 Delete Table1 where Time < '2006-3-10' 由于涉及的记录比较多,所以日志记录也相应很大(3-4G),如果可行,我建议用以下方式:

选出您所需要保留的记录到新的表。如果您使用 Full Recovery Mode
根据SELECT INTO的记录数,日志可能会比较大
Select * into Table2 From Table1 Where Time > = '2006-03-10' 

然后直接Truncate Table1。无论何种恢复模式都不会进行日志记录
Truncate table Table1

最后对Table2进行改名为Table1
EC sp_rename 'Table2', 'Table1'

纪录ORA-12560:【上一篇】
JDBC中获取数据表的信息:【下一篇】
【相关文章】
  • SqlServer存储过程/函数加/解密
  • .Net下调用SqlServer2k存储过程
  • sqlserver2K 打上sp4客户端无法连接 的解决方法
  • 取得SQLServer字段的描述内容
  • 删除比较危险的sqlserver存储过程
  • 对sqlserver查询的优化
  • LTP.Net代码自动生成器 V1.9.4 版发布(全面支持SQLServer2005,Oracle 等)
  • LTP.Net代码自动生成器 V1.9.4版全新发布(全面支持SQLServer2000,SQLServer2005,Oracle,OleDb等)
  • JAVA在Sqlserver中存取图片
  • 通过OLEDB读取SQLSERVER数据库的使用经验
  • 【随机文章】
  • 火鸟字幕合并器V0.5 Build2006.5.9正式发布,下载地址不变
  • 工作中想到的
  • Mantis学习笔记
  • SED HandBook
  • eclipse3.2快捷键
  • 为什么测试光纤要进行双向测试
  • Flash教程:安装和配置JDK开发环境
  • 宽带接入网技术解析
  • GLIB 安装手记
  • 修改SDI主窗口Title
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.