首页 > 数据库 >sqlserver 亿级数据删除方案

sqlserver 亿级数据删除方案

时间:2024-05-13 17:30:31浏览次数:14  
标签:语句 删除 -- BatchSize sqlserver 清空 亿级 数据

sqlserver 删除百万级别及以上数据的时候需要考虑是否需要保留日志文件,如果需要保留日志文件,用于恢复。那么就要使用DELETE语句进行删除,DELETE删除语句尽量使用主键或者索引的字段,

同时进行批量删除语句如下:

 1 DECLARE @BatchSize INT
 2 SET @BatchSize = 10000 -- 设置每批删除的记录数量
 3  
 4 WHILE 1 = 1
 5 BEGIN
 6     DELETE TOP (@BatchSize) FROM YourTable
 7     WHERE YourIDColumn IN (SELECT TOP (@BatchSize) YourIDColumn FROM YourTable)
 8     IF @@ROWCOUNT < @BatchSize
 9         BREAK
10 END

如果说不考虑恢复日志,那么可以对表数据直接清空,

1 truncate table 表名称         -- 清空表

表清空后,磁盘空间可能不会完全释放,这是因为InnoDB 中采用了 B+ 树作为存储数据的结构,也就是常说的索引组织表。在InnoDB中,delete操作并不会真的删除数据,SQL Server实际上只是给要删除的数据打了标记,标记为删除。磁盘所占空间不会变小,即表空间并没有真正被释放。可以使用一下语句进行空间收缩。

DBCC SHRINKDATABASE ( 数据库名称 )

删除表的语句效率对比:

delete 表名称 where 删除条件    -- 删除数据,执行效率低
drop table 表名称        -- 删除表,效率一般
truncate table 表名称         -- 清空表,效率高

删除数据主要就是是否考虑恢复。选择合适自己业务场景的方式对数据库进行相应的操作。

标签:语句,删除,--,BatchSize,sqlserver,清空,亿级,数据
From: https://www.cnblogs.com/jiaxuekai/p/18189664

相关文章

  • 文件删除后空间未释放
    文件删除后空间未释放   第一步:找到处于delete状态的较大的文件,以及使用进程lsof|grep-idelete|sort-nrk7|head|awk'BEGIN{print"file-size","PID","system"}{print$7/1024/1024"M",$2,$9}'|column-t  删除这个进程,然后重新启动即可,这个是进程占......
  • sqlserver2019安装
    说明:新版sqlserver安装分两部分:第一部分安装服务 第二部分安装管理工具 第一步:下载安装包 ed2k://|file|cn_office_professional_plus_2019_x86_x64_dvd_5e5be643.iso|3775004672|1E4FFA5240F21F60DC027F73F1C62FF4|/第二步:安装服务这里注意:    推荐第一种安......
  • SQLServer统计监控SQL执行计划突变的方法
    使用动态管理视图(DMVs)来检测SQL执行计划的突变,你需要关注那些能够提供查询执行统计和计划信息的视图。以下是一些可以用于此目的的DMVs以及相应的查询示例:sys.dm_exec_query_stats:这个视图提供了关于SQLServer中查询执行的统计信息,包括CPU时间、总工作时间、执行次数等。SEL......
  • SQLServer如何查询近3分钟最消耗CPU的SQL
    在SQLServer中,要查询近3分钟最消耗CPU的SQL语句,可以使用sys.dm_exec_query_stats动态管理视图结合sys.dm_exec_sql_text函数来获取SQL语句的文本。不过,直接查询近3分钟的数据可能需要一些额外的逻辑来筛选时间范围,因为sys.dm_exec_query_stats并不直接提供时间筛选的功能。一种......
  • php centos选择sqlserver的驱动和扩展选择版本的说明
    2023年2月23日13:41:48首先是phpphp扩展驱动数据库的关系官方文档说明:https://learn.microsoft.com/zh-cn/sql/connect/php/step-1-configure-development-environment-for-php-development?view=sql-server-2017https://learn.microsoft.com/zh-cn/sql/connect/php/syste......
  • Linux 中删除某一目录中所有 以数字命令的文件或者文件夹
      在一些场景下,会遇到指定目录中出现大量的以数字命名的文件或者目录,如何实现批量删除:001、[root@PC1test2]#ls##测试文件及目录,如何删除所有的以数字命名的文件和目录120297489a.txtb.txtdir11[root@PC1test2]#rm-rf{1..100......
  • Oracle 删除千万级数据量时,可以考虑以下方法来提高删除效率
    Oracle删除千万级数据量时,可以考虑以下方法来提高删除效率:分批删除:如果需要删除的数据量非常大,可以考虑分批进行删除。sqlDELETEFROMyour_tableWHEREyour_conditionANDrownum<=10000;COMMIT;使用直接路径删除:直接路径删除会绕过常规的SQL解析和绑定,可以减少删除操......
  • 代码随想录算法训练营第四天 | 23.两l两交换链表中的节点 19.删除链表的倒数第N个节点
    23.两两交换链表中的两个节点题目链接文章讲解视频讲解时间复杂度o(n)空间复杂度o(1)tips:画图,并将每一步操作用伪代码写出来,然后将代码理顺可以避免修改代码的麻烦初始化的时候就要将previous初始化为current的前一个节点,这样可以保证循环的第一步满足循环要求cla......
  • 【python】bilibili动态删除脚本
    importpprintimportrequestsimportjsonimportreimportos#最大删除条数MAX_COUNT=200#保存cookie的路径COOKIE_FILE_PATH=r"./cookie.txt"classBWebSite(object):def__init__(self):ifnotos.path.exists(COOKIE_FILE_PATH):print("未检测到cooki......
  • 代码随想录算法训练营第第二天 | 24. 两两交换链表中的节点 、19.删除链表的倒数第N
    两两交换链表中的节点用虚拟头结点,这样会方便很多。本题链表操作就比较复杂了,建议大家先看视频,视频里我讲解了注意事项,为什么需要temp保存临时节点。题目链接/文章讲解/视频讲解:https://programmercarl.com/0024.两两交换链表中的节点.html/***Definitionforsingly-li......