sql-server - 大型 Fact 表中 NCI dateKey 上的 sql update 语句的最佳实践
问题描述
我有一个 55Gb 的事实表,我必须删除一些稍后可以恢复的记录。删除记录的数量在 10 到 10 万之间变化。
目前我的删除策略基于此:我将要删除的记录的 dateKey 更新为例如从正整数 20080122 到负整数 -20080122,以便当前日期过滤器不包括它。
我的想法是,我不是在事实表中将数据移出和移回,而是使日期超出过滤日期范围,然后通过使用 dateKey 上的更新将其移回可过滤的日期范围。
我想听听您对此删除策略的看法,尤其是围绕 NCI(非聚集索引)行为的看法。你认为更新索引的 dateKey 比移动实际数据更好吗?
解决方案
我们的标准做法不是重新使用该dateKey
列,而是向表中添加一个“软删除”列,一个“is_deleted”位列或一个“deleted_on”日期时间列,并使用该列过滤掉“已删除”行。
这需要您做更多的工作,因为您必须修改所有现有查询才能使用此新列,但现在您的数据库不必执行重新索引或删除/插入实际数据的工作。
推荐阅读
- pandoc - 如何将我的 pandoc 转换结果附加到文件中?
- vue.js - vue js 如何在 index.html 中使用“process.env”变量
- css - 为什么 Firefox 打印 css 空白?
- python - 无法在其他文件中导入 mongo 对象
- angular - 如何将段设置为角度 6 路线?
- javascript - MixItUp:请求了操作,但 MixItUp 实例正忙
- c - 使用有限的类 C 库将科学计数法字符串中的数字转换为浮点数
- node.js - 如何仅获取子 Firebase 云功能的一个值?
- c# - 运行带有参数的 C# exe,以启动另一个应用程序并从控制台获取输出
- html - Angular 6 iframe 绑定