SQL Server DATE与INT作为主键

时间:2017-03-20 20:45:29

标签: sql-server sqlperformance

我有一个参考表,它将跟踪大量年份的给定日期范围,最精细的级别是给定的一天。
几位同事建议我使用代理INT作为密钥,格式为YYYYMMDD。虽然这似乎是合乎逻辑的过程,但我想知道使用简单的DATE数据类型作为PK而不是INT。我的理由是双重的:

  1. DATE取代了3个字节的数据,而INT取代了4个。虽然这并没有在空间方面节省太多,但它在性能方面可以节省很多。考虑到该表也将覆盖非聚集索引,主键的大小也非常重要(隐藏索引列)。
  2. 由于使用此数据的上下文确实围绕日期,我担心INT和DATE之间的转换。从小规模来看,它并没有太大的区别;然而,一旦我们扩大规模,它可能会引人注目。

1 个答案:

答案 0 :(得分:1)

由于我正在进行数据仓库,因此我会使用代理键,并在其他表中引用该键。基于整数的连接仍然比日期数据类型

更快

创建一个用日期填充的表,如下所示......并在其他表中使用该日期键。

+---------+-----------+-----+------+----+
|DateKey  |Date       |Year |Month |Day |
+---------+-----------+-----+------+----+
|20170320 |20-03-2017 |2017 |3     |20  |
|20170321 |21-03-2017 |2017 |3     |20  |
|20170322 |22-03-2017 |2017 |3     |20  |
+---------+-----------+-----+------+----+