SQL SERVER快速删除数据库表里面的记录,truncate与delete的对比

本文探讨了使用truncate与delete操作在数据库表数据清除过程中的性能差异。通过具体案例,作者发现truncate相较于delete提供了更快的数据清除速度,但同时也指出truncate不支持事务回滚这一局限性。

用BulkInsert向数据库里面的一个表里插入40W条数据,因为这个数据是实时更新的,所以每次都会先将表里面的数据全部删除,再将新来的数据插入进去,所以效率主要是在删除数据这儿。最开始我用的是delete,

delete from tb_data

再bulkinsert将数据入库,我会将这两个sql语句写到一个事务里面去,这样的话错误会回滚,但是我发现这样效率会比较低。所以我又在网上看到了truncated

truncate table tb_data

这样一改效率就提升多了,但是我发现这样的话就不能用事务了,所以到底用哪个,我还需要仔细衡量下。

总的来说,truncate和delete的主要区别就是在此,提出来和大家一起学习下。

### 查找 SQL Server 中 `TRUNCATE TABLE` 操作的日志记录SQL Server 中,`TRUNCATE TABLE` 命令不会像 `DELETE` 那样为每一行生成详细的事务日志条目。然而,在某些情况下仍然可以找到有关 `TRUNCATE TABLE` 操作的信息。 #### 使用默认跟踪功能 如果启用了 SQL Server 默认跟踪,则可以通过查询系统视图来获取这些信息: ```sql SELECT te.name AS EventName, t.text AS TSQLText, spid, loginame, hostname, start_time FROM sys.traces tr JOIN fn_trace_gettable(CONVERT(varchar(150), tr.path), DEFAULT) ft ON 1=1 JOIN sys.trace_events te ON ft.EventClass = te.trace_event_id CROSS APPLY sys.dm_exec_sql_text(ft.SqlHandle) t WHERE te.name IN ('Object:Altered', 'Audit Schema Object Management Event') AND t.text LIKE '%TRUNCATE TABLE%' ORDER BY start_time DESC; ``` 此脚本通过连接到当前启用的追踪文件并解析其中的数据来寻找任何涉及 `TRUNCATE TABLE` 的事件[^4]。 #### 利用扩展事件 (Extended Events) 对于更现代的方法,建议配置 Extended Events 来捕获特定于 DDL 或 DML 更改的通知。这允许更加精细控制哪些活动应该被监视以及如何处理收集到的数据。 创建一个新的 Expanded Event Session 并指定要监听的对象更改通知: ```xml CREATE EVENT SESSION [CaptureTruncateOperations] ON SERVER ADD EVENT sqlserver.object_alter( ACTION(sqlserver.sql_text) WHERE ([object_type]='U' AND statement like 'TRUNCATE%')) WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS); GO ALTER EVENT SESSION [CaptureTruncateOperations] ON SERVER STATE = START; ``` 之后可以从 session target 获取已发生的 truncate 行动详情. 请注意,默认情况下,`TRUNCATE TABLE` 不会被完全记录在标准事务日志中,除非处于完整的恢复模式下,并且即使如此也可能难以直接识别具体的 truncate 动作。因此上述方法提供了替代方案以帮助定位此类操作的发生情况.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值