我有一些较大的表(大约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
)哪个版本更有效率,为什么?
发布于 2017-02-21 14:18:38
如果没有用例,这是很难回答的。索引位列的效率仅略高于date列,因为索引可能更小,并且适合页面中更多的记录,但是,添加位列将使表稍微宽一点,即效率稍低。
如果使用聚集索引,则不要添加位列,只添加日期索引。
如果这是一个覆盖性非聚集索引,并且需要包含日期列,则不要添加位列,而是索引日期。
如果这是针对不需要日期的覆盖非聚集索引,则使用位列并包括所需列,前提是日期不包括,并且不使用date列创建另一个非聚集索引。
总的来说,我觉得位列是浪费空间,因为用例非常狭窄。
https://stackoverflow.com/questions/42368133
复制相似问题