我在查看AdventureWorksDW
事实表中的datekey
列,它们都是int
类型。为什么datekey中的表总是INT?
是否有这样的原因,而不是类型date
?
据我所知,创建一个由INT
组成的聚集索引可以优化查询速度。但是,让我们说我想从过去一周获取数据。我可以从的日期减去6,我将得到20170698
这不是有效的日期。所以我必须将所有东西都投射到date
,减去,然后投射为int
。
现在我有一个外键约束,以确保除'YYYYMMDD'之外的东西没有插入。对于Date
类型,这不是必需的。刚才,我想在6/28和7/4之间获得一些数据。我不能只从`20170703'减6;我不得不从int到现在。
它看起来很麻烦,没有太多好处。
谢谢。
为什么你认为'int'(4字节)的索引会比'date'数据类型(3字节)更高效? –
这里有一些讨论http://www.made2mentor.com/2011/05/date-vs-integer-datatypes-as-primary-key-for-date-dimensions/ –
使用代理键有一个重要的好处:如果你决定增加时间维度的粒度(从几天到几个小时),你可以毫不费力地做到这一点,而不必改变现有的数据(是的,我有一个数据仓库的经验)。请注意,我正在讨论一个* surrogate *键,而不是一个'INT'键,它创造性地编码了一个日期,我看不出有什么比实际日期/时间类型更有优势。 –