• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
山人佳燕品 显示全部楼层 发表于 2021-10-25 20:11:29 |阅读模式 打印 上一主题 下一主题
近来有个朋友问我,他说他在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'

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作