代码之家  ›  专栏  ›  技术社区  ›  Henry

是否使用deleteAt dateTime列筛选软删除的索引或索引视图?

  •  0
  • Henry  · 技术社区  · 10 年前

    我们使用 deleteAt 列,指定某个内容是活动的还是(软)删除的。查询活动内容的最佳技术是什么?

    实际表上的筛选索引是否更好 deleteAt is NULL ?

    这是索引视图的好用例吗?

    或者我们应该使用过滤索引进行常规查看?

    1 回复  |  直到 10 年前
        1
  •  2
  •   M.Ali    10 年前

    我将使用两列来代替一个Datetime列来处理软删除。

    ColumnName    Data Type
     Deleted        BIT      DEFAULT(0) 
     DeletedAt    DateTime     
    

    并在“已删除”列上创建筛选索引 WHERE Deleted = 0 .

    原因是,具有软删除行的数据通常只返回活动/非删除行。因此,每次返回行时,sql server都可以查看最小数据类型(位为1字节)上的过滤索引,从而减少数据处理。

    如果你想知道一条记录是什么时候被删除的,DaletedAt列就是用来存储这条信息的。

    另一方面,如果您只有一个Datetime列来处理软删除,那么您的筛选索引将类似于 WHERE DeletedAT IS NULL ,现在在这种情况下,SQL Server将查询8个字节的数据,以检查一行是否处于活动状态。在这种情况下,与BIT列相比,您要进行8倍的数据处理,以获得相同的结果。听起来很糟糕,不是吗。

    因此,我的建议是添加另一个位列,并在该位列上创建一个过滤索引,以处理软删除。保留DeletedAt列以仅处理删除。