【发布时间】:2017-07-05 19:04:20
【问题描述】:
我正在查看AdventureWorksDW 中的事实表中的datekey 列,它们都是int 类型。
这是有原因的,而不是date类型的原因吗?
我了解创建由INT 组成的聚集索引将优化查询速度。但是,假设我想获取过去一周的数据。我可以从日期20170704 中减去 6,我会得到20170698,这不是一个有效的日期。所以我必须将所有内容都转换为date,减去,然后转换为int。
现在我有一个外键约束来确保没有插入除 'YYYYMMDD' 之外的东西。 Date 类型没有必要。刚才,我想得到一些 6/28 和 7/4 之间的数据。我不能只从“20170703”中减去六个;我必须从 int 转换到日期。
这似乎很麻烦,而且好处不多。
谢谢。
【问题讨论】:
-
您为什么认为
int(4 字节)上的索引比date数据类型(3 字节)上的索引更有效? -
这里有一些讨论made2mentor.com/2011/05/…
-
使用代理键有一个重要的好处:如果您决定增加时间维度的粒度(例如,从几天到几小时),您可以轻松地这样做,而无需更改现有数据 (是的,我有这样做的数据仓库的经验)。请注意,我说的是 surrogate 键,而不是创造性地编码日期的
INT键,我看不出它比实际的日期/时间类型有任何好处。
标签: sql-server ssis sql-server-2012 ssas data-warehouse