sql 大型 Fact table 中 NCI dateKey 更新语句的最佳实践
Best practice on sql update statement on NCI dateKey in large Fact table
我有一个 55Gb 的事实 table,我必须删除一些记录,这些记录稍后可以恢复。删除的记录数在10到10万之间。
目前我的删除策略是基于这样的:
我更新要删除的记录的 dateKey,例如从正整数 20080122 到负整数 -20080122,以便当前日期过滤器不包含它。
我的想法是,实际上 table 我不是将数据移出和移回,而是将日期设置在筛选日期范围之外,然后通过使用 dateKey 更新将其移回可筛选日期范围。
我想听听您对此删除策略的看法,尤其是围绕 NCI(非聚集索引)行为的看法。您认为更新索引的 dateKey 比移动实际数据更好吗?
我们的标准做法是将 "soft delete" 列添加到 table,而不是重新调整 dateKey
列的用途,一个 "is_deleted" 位列或一个"deleted_on" 日期时间列并使用该列过滤掉 "deleted" 行。
这需要您做更多的工作,因为您必须修改所有现有查询才能使用这个新列,但现在您的数据库不必执行重新索引或 deleting/inserting 实际数据。
我有一个 55Gb 的事实 table,我必须删除一些记录,这些记录稍后可以恢复。删除的记录数在10到10万之间。
目前我的删除策略是基于这样的: 我更新要删除的记录的 dateKey,例如从正整数 20080122 到负整数 -20080122,以便当前日期过滤器不包含它。
我的想法是,实际上 table 我不是将数据移出和移回,而是将日期设置在筛选日期范围之外,然后通过使用 dateKey 更新将其移回可筛选日期范围。
我想听听您对此删除策略的看法,尤其是围绕 NCI(非聚集索引)行为的看法。您认为更新索引的 dateKey 比移动实际数据更好吗?
我们的标准做法是将 "soft delete" 列添加到 table,而不是重新调整 dateKey
列的用途,一个 "is_deleted" 位列或一个"deleted_on" 日期时间列并使用该列过滤掉 "deleted" 行。
这需要您做更多的工作,因为您必须修改所有现有查询才能使用这个新列,但现在您的数据库不必执行重新索引或 deleting/inserting 实际数据。