首页 > 解决方案 > 大型 Fact 表中 NCI dateKey 上的 sql update 语句的最佳实践

问题描述

我有一个 55Gb 的事实表,我必须删除一些稍后可以恢复的记录。删除记录的数量在 10 到 10 万之间变化。

目前我的删除策略基于此:我将要删除的记录的 dateKey 更新为例如从正整数 20080122 到负整数 -20080122,以便当前日期过滤器不包括它。

我的想法是,我不是在事实表中将数据移出和移回,而是使日期超出过滤日期范围,然后通过使用 dateKey 上的更新将其移回可过滤的日期范围。

我想听听您对此删除策略的看法,尤其是围绕 NCI(非聚集索引)行为的看法。你认为更新索引的 dateKey 比移动实际数据更好吗?

标签: sql-serversql-updatenon-clustered-index

解决方案


我们的标准做法不是重新使用该dateKey列,而是向表中添加一个“软删除”列,一个“is_deleted”位列或一个“deleted_on”日期时间列,并使用该列过滤掉“已删除”行。

这需要您做更多的工作,因为您必须修改所有现有查询才能使用此新列,但现在您的数据库不必执行重新索引或删除/插入实际数据的工作。


推荐阅读