存储和索引datetime2与bit + datetime2

时间:2017-02-21 13:05:01

标签: sql-server sql-server-2008-r2

我有一些大表(约2000万行),需要存储bit个信息以及其他datetime2。我知道我将始终仅查询bit信息,当bit信息为1时,始终存在datetime2信息。我正在考虑实现这两种方法:

a)索引仅包含Enabled

create table Items ( 
    Enabled bit not null,
    EnabledWhen datetime2 null
)

b)索引仅包含Enabled,但查询将始终为Enabled is nullEnabled is not null

create table Items (
    Enabled datetime2 null
)

哪个版本效率更高,为什么?

1 个答案:

答案 0 :(得分:1)

如果没有您的用例,这很难回答。索引位列将比日期列更有效,因为索引可以更小并且在页面中适合更多记录,但是,添加位列将使您的表更宽一些,即效率稍低。 / p>

如果您使用的是聚簇索引,请不要添加位列,只需将日期编入索引。

如果这是覆盖非聚集索引并且您需要包含日期列,请不要添加位列,而是将日期编入索引。

如果这是针对不需要日期的覆盖非聚集索引,请使用位列并包含所需的列,假设未包含日期,并且您不打算使用其创建另一个非聚集索引日期栏。

总的来说,我觉得位列是浪费空间,因为用例非常狭窄。