我有一些大表(约2000万行),需要存储bit
个信息以及其他datetime2
。我知道我将始终仅查询bit
信息,当bit
信息为1时,始终存在datetime2
信息。我正在考虑实现这两种方法:
a)索引仅包含Enabled
create table Items (
Enabled bit not null,
EnabledWhen datetime2 null
)
b)索引仅包含Enabled
,但查询将始终为Enabled is null
或Enabled is not null
create table Items (
Enabled datetime2 null
)
哪个版本效率更高,为什么?
答案 0 :(得分:1)
如果没有您的用例,这很难回答。索引位列将比日期列更有效,因为索引可以更小并且在页面中适合更多记录,但是,添加位列将使您的表更宽一些,即效率稍低。 / p>
如果您使用的是聚簇索引,请不要添加位列,只需将日期编入索引。
如果这是覆盖非聚集索引并且您需要包含日期列,请不要添加位列,而是将日期编入索引。
如果这是针对不需要日期的覆盖非聚集索引,请使用位列并包含所需的列,假设未包含日期,并且您不打算使用其创建另一个非聚集索引日期栏。
总的来说,我觉得位列是浪费空间,因为用例非常狭窄。