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

最近有个朋友问我,他说他在SQLSERVER删除几百万到几千万数据是显的很慢,帮他分析了一下,提了一些以下意见,或许对很多人有用。

如果你的硬盘空间小,并且不想设置数据库的日志为最小(因为希望其他正常的日志希望仍然记录),而且对速度要求比较高,并清除所有的数据建议你用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'

时间: 2024-09-15 22:20:48

如何在 SQL SERVER 中快速有条件删除海量数据的相关文章

如何在 SQL SERVER 中快速有条件删除海量数据_MsSql

最近有个朋友问我,他说他在SQLSERVER删除几百万到几千万数据是显的很慢,帮他分析了一下,提了一些以下意见,或许对很多人有用.     如果你的硬盘空间小,并且不想设置数据库的日志为最小(因为希望其他正常的日志希望仍然记录),而且对速度要求比较高,并清除所有的数据建议你用turncate table1,因为truncate 是DDL操作,不产生rollback,不写日志速度快一些,然后如果有自增的话,恢复到1开始,而delete会产生rollback,如果删除大数据量的表速度会很慢,同时会占

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

server|sqlserver|数据|条件    1.SQLSERVER数据库改bit类型为 not Boolean(即,true改成false;false改成true) 例:update 表 set bit字段=bit字段-1最近有个朋友问我,他说他在SQLSERVER删除几百万到几千万数据是显的很慢,帮他分析了一下,提了一些以下意见,或许对很多人有用,再者也好长没写过BLOG了,一起探讨一下 如果你的硬盘空间小,并且不想设置数据库的日志为最小(因为希望其他正常的日志希望仍然记录),而且对速

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

1.SQLSERVER数据库改bit类型为 not Boolean(即,true改成false;false改成true) 例:update 表 set bit字段=bit字段-1最近有个朋友问我,他说他在SQLSERVER删除几百万到几千万数据是显的很慢,帮他分析了一下,提了一些以下意见,或许对很多人有用,再者也好长没写过BLOG了,一起探讨一下 如果你的硬盘空间小,并且不想设置数据库的日志为最小(因为希望其他正常的日志希望仍然记录),而且对速度要求比较高,并清除所有的数据建议你用turncat

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

如果你的硬盘空间小,并且不想设置数据库的日志为最小(因为希望其他正常的日志希望仍然记录),而且对速度要求比较高,并清除所有的数据建议你用turncate table1,因为truncate 是DDL操作,不产生rollback,不写日志速度快一些,然后如果有自增的话,恢复到1开始,而delete会产生rollback,如果删除大数据量的表速度会很慢,同时会占用很多的rollback segments,同时还要记录下G级别的日志 :当然如果有条件删除比如where time〈'2006-3-10'

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

如果你的硬盘空间小,并且不想设置数据库的日志为最小(因为希望其他正常的日志希望仍然记录),而且对速度要求比较高,并清除所有的数据建议你用turncate table1,因为truncate 是DDL操作,不产生rollback,不写日志速度快一些,然后如果有自增的话,恢复到1开始,而delete会产生rollback,如果删除大数据量的表速度会很慢,同时会占用很多的rollback segments,同时还要记录下G级别的日志 :当然如果有条件删除比如where time〈'2006-3-10'

如何在SQL Server中构建数据仓库

[导读]本文介绍如何在SQL Server中构建简单的数据仓库,并分析相关的问题. 基本概念: 1.多维数据集:多维数据集是联机分析处理 (OLAP) 中的主要对象,是一项可对数据仓库中的数据进行快速访问的技术.多维数据集是一个数据集合,通常从数据仓库的子集构造,并组织和汇总成一个由一组维度和度量值定义的多维结构. 2.维度:是多维数据集的结构性特性.它们是事实数据表中用来描述数据的分类的有组织层次结构(级别).这些分类和级别描述了一些相似的成员集合,用户将基于这些成员集合进行分析. 3.度量值

在SQL Server中快速删除重复记录

server|重复|重复记录 开发人员的噩梦--删除重复记录 想必每一位开发人员都有过类似的经历,在对数据库进行查询或统计的时候不时地会碰到由于表中存在重复的记录而导致查询和统计结果不准确.解决该问题的办法就是将这些重复的记录删除,只保留其中的一条. 在SQL Server中除了对拥有十几条记录的表进行人工删除外,实现删除重复记录一般都是写一段代码,用游标的方法一行一行检查,删除重复的记录.因为这种方法需要对整个表进行遍历,所以对于表中的记录数不是很大的时候还是可行的,如果一张表的数据达到上百万

如何在SQL Server中恢复数据

server|恢复|数据 在SQL server 中恢复数据的几种办法: 1.自然就是 backup 的 恢复方法 backup 这种方法是最安全,最可靠的方法操作起来也很简单,只要在 sql server 的 enterprise manager中选择 restore 就可以了. 用T-SQL 也可以完成: RESTORE DATABASE test FROM DISK = 'c:\mssql7\backup\test.bak' 当然这是用的 文件恢复,如果是 设备恢复 自然也是可以的. 2.

技巧:如何在SQL Server中创建全局临时表

全局临时表的生命周期一直持续到创建会话(不是创建级别)才终止.例如,如果你在存储过程中创建 全局临时表,当超出存储过程的范围时,该表并不会被销毁.当创建会话终止后,Sql Server才会自动尝 试删除该表,其他会话中对其提交的所有语句都将结束,并释放它们所保持的所有锁. 但在某些情况下,你可能想创建一个不属于任何会话的全局临时表.这时,无论哪个会话打开或关闭 ,它总数存在,只有显式的删除它才能被移除.为此,可以在一个特殊的存储过程中(使用sp_前缀,在 master中创建)创建该表并使用"st