事实表中NCI dateKey上的SQL更新语句的最佳实践

时间:2019-01-07 12:24:35

标签: sql-server sql-update non-clustered-index

我有一个55Gb事实表,在其中我必须删除一些记录,以后可以将其还原。删除的记录数在10到10万之间。

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

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

我想听听您对这种删除策略的看法,尤其是关于NCI(非聚集索引)行为的看法。您认为更新索引的dateKey优于移动实际数据吗?

1 个答案:

答案 0 :(得分:0)

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

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