首页 > 数据库 >T-SQL——关于删除

T-SQL——关于删除

时间:2024-05-22 17:32:33浏览次数:19  
标签:删除 truncate dbo 关于 SQL table 日志 TestWhileDelete

目录

shanzm-2024年5月21日 09:20:38

1. 数据太多,删除太慢,日志暴增,存储不够

把一个大型的Delete操作可以分拆为多次执行Delete

分拆的越小,事务等级底,不会避免锁,而且可以重复利用事务的日志。

具体分拆方式就是通过 While和Top进行循环删除

这里:循环每次删除5000条数据,每个删除都是一个独立的事务中执行的,当删除完最后一批数据(即,受影响的行数小于5000)时,循环终止

CREATE TABLE [dbo].[TestWhileDelete](
	[Id] [BIGINT] IDENTITY(1,1) NOT NULL,
	[CreateTime] [DATETIME] NULL,
	[Value] [NVARCHAR](50) NULL,
)


INSERT INTO [dbo].[TestWhileDelete]
           ([CreateTime],[Value])
     VALUES
           (GETDATE(),'1234')
GO 1000000



SELECT * FROM  dbo.TestWhileDelete

WHILE 1=1
BEGIN
	--将筛选出来的数据,循环每次删除1000条
    DELETE TOP(5000)   FROM dbo.TestWhileDelete WHERE Id>100 
    IF @@ROWCOUNT<5000 BREAK;
END;



2. 使用TRUNCATE TABLE

  • truncate table 是删除指定表的所有行,并将

  • truncate table 按照最小方式记录日志,因此很快

  • truncate table 不会触发表上的任何delete触发器

  • truncate table 将Identity属性重置为最初的种子值,即:将自增值重置

  • 使用truncate table 清空表中的百万行数据只要几秒,而使用delete可以时间要很久

  • truncate table 具有一定的危险性,一定要确定是指定的表



3. 按照最小方式记录日志进行删除

  • 把原表A中需要保留的数据通过SELECT * INTO table_nameA FROM table_nameB到一张新表B中
    • 注意1:table_nameB 会自动创建,所以不需要 也不可以 事先创建好
    • 注意2:从tableA复制到tableB中的仅仅是指定字段和字段的值,不包含主键、索引、约束和触发器,所以千万不要通过此种方式创建一个相同字段,相同功能的表(若是需要还是选中表右键-->编写脚本为-->create到
  • 把原表A删除
  • 把原表B修改名称为表B,同时将原表A有的主键和索引创建在当前表上

标签:删除,truncate,dbo,关于,SQL,table,日志,TestWhileDelete
From: https://www.cnblogs.com/shanzhiming/p/18203292

相关文章

  • 使用本地MSSQL管理器链接本地/服务器上的MySql
    使用本地MSSQL管理器链接本地/服务器上的MySql步骤如下:第一步,安装ODBC数据源驱动打开控制面板》管理工具》找到ODBC数据源 第二步、添加数据源驱动程序打开ODBC数据源后点击添加》选择MySQL数据源的驱动程序,然后点击完成第三步、填写MySQL连接信息按照弹出的页面。填......
  • SQL Server 查询超时问题排查
    生产环境单表查询超时,表数据500万+,这点数据按道理不加不加索引都不应该超时。排查业务数据,发现业务数据每天插入25万+。初步怀疑并发导致数据处理不及时,进一步排查每分钟都有300的左右实时数据插入到业务表,锅应该不在这里排查数据服务器,发现CPU占用不高,512G的内存占用高达96%。但s......
  • Dapper升级SqlSugar问题汇总
    最近群里有个小伙伴把Dapper迁移SqlSugar几个不能解决的问题进行一个汇总,我正好写一篇文章来讲解一下 一、sqlwherein传参问题:SELECT*FROMuserswhereidIN@ids答:SqlSugar中应该是//SELECT*FROMuserswhereidIN(@ids)varlistdb.Ado.SqlQuery<Users......
  • 安卓-SQLite-基础知识-全-
    安卓SQLite基础知识(全)原文:zh.annas-archive.org/md5/C362B2CF2341EAB7AC3F3FDAF20E2012译者:飞龙协议:CCBY-NC-SA4.0前言Android可能是本十年的热词。在短短的时间内,它已经占据了大部分手机市场。Android计划在今年秋天通过AndroidL版本接管可穿戴设备、我们的电视......
  • SQL Server常用方法【未完】
    判断字符串是否包含某个字符串--函数:CHARINDEX--通过CHARINDEX如果能够找到对应的字符串,则返回该字符串位置,否则返回0--基本语法如下:--CHARINDEX(expressionToFind,expressionToSearch[,start_location])-- expressionToFind:目标字符串,就是想要找到的字符......
  • 小组练习:请列出关于创新感受最深的几点启发
    1.持续学习和探索:创新源自对未知领域的好奇心和探索精神。保持开放的心态,持续学习新知识,接触不同领域的知识和观点,为创新提供灵感和新思路。2.用户需求导向:创新应以满足用户需求为核心。深入了解用户的痛点和需求,从而开发出真正能够解决问题的产品或服务。3.跨学科思维:将不同学......
  • 力扣-1209. 删除字符串中的所有相邻重复项 II
    1.题目题目地址(1209.删除字符串中的所有相邻重复项II-力扣(LeetCode))https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string-ii/题目描述给你一个字符串 s,「k倍重复项删除操作」将会从s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的......
  • d3 v7树图实现动态边框,新增/编辑兄弟节点、子节点,删除节点和拖拽、缩放,动态边框
    d3版本:v7。PS:在用d3之前需要先了解SVG和CSS相关知识。树图生成部分和部分效果都是用SVG相关标签完成的。 效果图:  全部代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=devi......
  • 关于vue-baidu-map的一些记录
    这一阶段主要的内容是负责编写和百度地图相关的信息。(写到我想吐)仿照导航的页面效果。1.使用说明这里使用的是vue-baidu-map相关组件,这里我就不去说明如何去安装他们了,我们直接向下看。vue-baidu-map的操作手册的网址:VueBaiduMap(dafrok.github.io)。当然我这里介绍的那些只......
  • LLM-文心一言:MySQL索引失效的场景
    MySQL中的索引是加速数据检索的关键工具,但在某些情况下,即使存在索引,MySQL也可能不会使用它,这被称为“索引失效”。以下是MySQL索引可能失效的一些常见场景:查询条件中使用函数或表达式:如果在查询条件中对索引列使用了函数或表达式,MySQL可能无法使用该索引。例如,WHEREYEAR(date_......