前言:
由于新型冠状病毒影响,博主(zhang502219048)在2020年1月份从广东广州工作地回到广东揭阳产业转移工业园磐东街道(镇里有阳美亚洲玉都、五金之乡,素以“金玉”闻名)老家后,还没过去广州现场复工,年后又延迟复工 + 居家办公,并且在老家对原来房子进行简单装修,1月份到3月份没时间去写下博文。今天就来对居家办公期间摸索到的一个数据库编程技巧进行整理并分享给大家。
问题场景:
在大批量删除数据库表部分数据、archive数据的时候,如果数据库表的非聚集索引比较多比较大,会严重影响删除性能,这时候就需要采取适当措施,避免删除数据过程中不断去维护非聚集索引,可以先临时删除/禁用一些非聚集索引,再进行数据删除操作,提高删除性能,删除完数据后,再重新创建加回/启用这部分非聚集索引。
解决方案1:
先备份非聚集索引,然后删除非聚集索引,最后重新创建非聚集索引。删除和创建索引脚本如下:
--临时删除非聚集索引 drop index [NonClusteredIndex-502219048] on [dbo].[table1] --============== --删除部分表数据 --============== --重新创建加回非聚集索引 create nonclustered index [NonClusteredIndex-502219048] on [dbo].[table1] ( [num] asc )
解决方案2(推荐):
先禁用非聚集索引,最后重新启用非聚集索引。禁用和启用索引脚本如下:
--临时禁用非聚集索引 alter index [NonClusteredIndex-502219048] on [dbo].[table1] disable --============== --删除部分表数据 --============== --重新启用非聚集索引 alter index [NonClusteredIndex-502219048] on [dbo].[table1] rebuild
结论:
可以看到使用方案1的话,需要备份索引脚本,创建索引脚本也需要指定具体的字段,相对繁琐一些;
而使用方案2的话,只需要指定具体的表名和索引名称,而不需要具体的字段,相对来说比较简便快捷,简化了编程。
【尊重作者劳动成果,转载请注明博文来源:https://www.cnblogs.com/zhang502219048/p/12730451.html】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫