我有很多表都具有可空的DeletedDate列。我编写的每个查询都需要检查记录是否未删除,但不在乎何时删除记录。
我想在此列中添加索引,但是如果有一种方法可以对索引进行索引,那么它只会关心是否为null而不是按日期分组,这样似乎会更有效率。这是可能做到的还是SQL Server足够聪明以自行处理这种优化?
答案 0 :(得分:1)
您可以添加一个计算列,该列是删除的二进制指示。但是,索引二进制列通常不是很有用。
如果您想加快 SELECT
查询的速度,则将删除标志(或删除日期)作为聚集索引的第一列可能会有所帮助。使用该标志的查询将只扫描未删除记录的页面。为此,假设删除中将日期设置为当前日期,则使用日期本身可能很好。
当然,缺点是数据在删除时必须物理移动。如果删除仅以一种方式进行(即没有“取消删除”),那么开销可能不会太糟。