大型DELETE(删除大量数据)的一种解决方案

通过执行单条DELETE语句来删除一个大型的数据集会有以下的缺点:

1.DELETE语句的操作要被完整地记录到日志中,这要求在事务日志中要有足够的空间以完成整个事务;

2.在删除操作期间(可能会花费很长时间),从最早打开的事务到当前时间点的所有日志都不能被重写;而且,如果由于某种原因,事务被中断,此前发生的所有操作都将被回滚,这也会花费一些时间;

3.当同时删除许多行时,SQL Server可能会把被删除行上的单一锁升级为排他锁,以阻止DELETE完成之前对目标表的读写访问。

想避免以上的问题,可以参考下面的这种方案的代码:

WHILE 1 = 1
BEGIN
  DELETE TOP (5000) FROM dbo.LargeOrders
  WHERE orderdate < ‘20070101‘;

  IF @@rowcount < 5000 BREAK;
END
GO

通过类似的方式,也可以把大型UPDATE操作拆分到多个批次中,只要正在修改的属性也是筛选器所使用的属性,代码:

WHILE 1 = 1
BEGIN
  UPDATE TOP (5000) dbo.LargeOrders
    SET custid = 123
  WHERE custid = 55;

  IF @@rowcount < 5000 BREAK;
END
GO
时间: 2024-10-05 12:08:04

大型DELETE(删除大量数据)的一种解决方案的相关文章

关于Mysql删除表数据的两种方式对比

1.delete from table_name 一行一行删除,只删除表数据,auto_increament仍停留在最后一天数据的下一个值. 2.truncate table_name 快捷删除表数据.先删除整个表,然后重新建表结构.auto_increament从1开始. 关于Mysql删除表数据的两种方式对比,布布扣,bubuko.com

SQLServer 恢复delete 删除的数据

恢复delete 删除的数据 一次偶然的机会我看到 恢复SQLSERVER被误删除的数据>博文 原文地址为:http://www.cnblogs.com/lyhabc/p/3683147.html 我就很好奇的看了下,然后就是一头雾水 ,完全看不懂 .其实我并没打算把 这篇博文看懂,既然别人已经开发好了 ,直接拿来用就行了. 后来我就随便测试了下 ,发现以下几个问题 1.博文中作者说 支持 datetime类型,测试的结果发现 完全不对,得到的日期是不正确的 2.该数据恢复方式不支持date类型

oracle删除表数据的两种的方式

转自:https://blog.csdn.net/qq_37840993/article/details/82490787 平时写sql中我们都会用到删除语句,而平时删除表数据的时候我们经常会用到两种方式: 在oracle中,truncate.delete都可以删除表数据,具体的区别以及sql语法如下: truncate table [表名]; delete from [表名]; delete与truncate的区别:delete:会产生rollback,如果删除大数据量的表速度会很慢,而且同时

Oracle删除重复数据的几种常用方法

1.有可区分的主键,其他数据相同 select * from 表名 dl where dl.id not in (select min(d.id) from  表名 d group by 重复列) 2.重复数据只能通过RowNum.RowId区分的数据 select * from 表名 where rowid in(select max(rowid) from  表名 d group by d.id,d.wareh_id,d.wareh_name having count(wareh_id)>1

恢复delete删除的数据

SELECT * FROM tablename AS OF TIMESTAMP TO_TIMESTAMP('2010-12-15 11:10:17', 'YYYY-MM-DD HH:MI:SS')

Excel删除重复数据及用公式筛选重复项并标记颜色突出显示

当表格记录比较多时,常常会有重复数据,而重复记录往往只希望保存一条,因此需要把多余的删除:在 Excel 中,删除重复数据有两种方法,一种是用“删除重复数据”删除,另一种是用“高级筛选”删除:其中前者删除重复数据后会在表格末尾留下空行,而后者不会.如果只想查看重复数据而不必删除,可以给重复数据标记颜色突出显示,这样会一目了然.另外,还可以用公式统计每条重复数据有几条或筛选出重复数据.以下是Excel删除重复数据及用公式筛选重复项并标记颜色的具体操作方法,操作中所用版本为 Excel 2016.

MySQL中删除数据的两种方法

转自:http://blog.csdn.net/apache6/article/details/2778878 在MySQL中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATE TABLE语句. DELETE语句可以通过WHERE对要删除的记录进行选择.而使用TRUNCATE TABLE将删除表中的所有记录.因此,DELETE语句更灵活. 如果要清空表中的所有记录,可以使用下面的两种方法: DELETE FROM table1 TRUNCATE TABLE table1 其

oracle数据库删除数据的两种方式

当表中的数据不需要是,则应该删除该数据,并释放所占用的空间; 删除表中的数据有delete和truncate两种方式,下面分别介绍: 一.delete语句 (1)有条件删除    语法格式:delete [from]  table_name  [where condition]; 如:删除users表中的userid为'001'的数据:delete from users where userid='001'; (2)无条件删除整个表数据 语法格式:delete  table_name; 如:删除

sql有几种删除表数据的方式

有几种删除表数据的方式? truncate.delete和drop都可以删除数据. TRUNCATE TABLE删除表中的所有行,而不记录单个行删除操作. TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似:但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少.DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项.TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放. TRU

SQL中CRUD C——create 添加数据 R——read 读取数据 U——update 修改数据 D——delete 删除数据

在SQL server中对数据库的操作: 删除表:drop table 表名修改表:alter table 表名 添加列add 列名 列类型alter table 表名 drop column 列名 删除数据库drop database 数据库名 CRUD操作C——create 添加数据 R——read 读取数据 U——update 修改数据 D——delete 删除数据 1.添加数据insert into 表名 values('第一列值','第二列值')——数据库中用单引号 每一列都要添加 第