创建一个只关心 DateTime 字段是否为 null 的索引?
Create an index that only cares if a DateTime field is null or not?
我有很多表都有可为空的 DeletedDate 列。我写的每个查询都需要检查记录没有被删除,但不关心什么时候它被删除了。
我想为该列添加一个索引,但如果有一种只关心它是否为 null 而不是尝试分组的方式对其进行索引的方式似乎会更有效日期。这是否可行,或者 SQL 服务器是否足够智能以自行处理这种优化?
您可以添加计算列,它是删除的二进制指示符。但是,索引二进制列通常不是很有用。
如果您想加快 SELECT
查询的速度,那么将删除标志(或删除日期)作为聚簇索引中的第一列可能会有所帮助。使用该标志的查询只会扫描具有未删除记录的页面。为此,假设在删除中将日期设置为当前日期,使用日期本身可能没问题。
缺点当然是数据在删除时必须进行物理移动。如果删除只有一种方式(即没有 "undeletes"),那么开销可能不会太糟糕。
我有很多表都有可为空的 DeletedDate 列。我写的每个查询都需要检查记录没有被删除,但不关心什么时候它被删除了。
我想为该列添加一个索引,但如果有一种只关心它是否为 null 而不是尝试分组的方式对其进行索引的方式似乎会更有效日期。这是否可行,或者 SQL 服务器是否足够智能以自行处理这种优化?
您可以添加计算列,它是删除的二进制指示符。但是,索引二进制列通常不是很有用。
如果您想加快 SELECT
查询的速度,那么将删除标志(或删除日期)作为聚簇索引中的第一列可能会有所帮助。使用该标志的查询只会扫描具有未删除记录的页面。为此,假设在删除中将日期设置为当前日期,使用日期本身可能没问题。
缺点当然是数据在删除时必须进行物理移动。如果删除只有一种方式(即没有 "undeletes"),那么开销可能不会太糟糕。