2017-05-07 157 views
0

我有一个数据仓库中的两个表:balancesdatesBalances具有以下结构:使用INT与DATE在where子句

Surrogate Key Date | Date  | Account | Balance 
1     | 2017-02-01 | 100  | 1234 
1     | 2017-02-01 | 200  | 5151 
2     | 2017-02-02 | 100  | 5123 
2     | 2017-02-02 | 200  | 8234 

而且dates具有以下结构:

Surrogate Key Date | Date  | Weekday | Week in Year | ... other columns 
1     | 2017-02-01 | Wed  | 5   | 
2     | 2017-02-02 | Thu  | 5   | 

Surrogate Key Date列是int类型,并且Date列是两个表中类型DATE。

balances表中的代理键在OLAP查询使用,以及日期用于定期报告。

现在,我需要开发集中使用的数据库(它是一个批处理过程)一个程序,它需要通过日期列重复访问的平衡表。我应该在这个过程中使用Surrogate Key Date列或Date列吗?我需要按日期过滤。 Where子句中的INT访问比DATE访问更有效吗?不使用OLAP时,我应该忽略Surrogate Key Date列吗?

回答

1

从性能上看,它可能并不重要,在所有的SAP HANA。一般来说,HANA在计算连接和结果集时使用实际的数据类型,但使用内部引用标识。

实际上,当它将1:1映射到Date列时,我并没有看到有第一个代理键的原因。另外,由于它似乎允许重复,它根本不是关键。不知道,您应该如何解决此模型中同一日期的特定记录。

+0

的'balances'表的关键是'代理键日期+帐户number',它不允许重复。我需要'Surrogate Key Date'来运行OLAP,而'Date'列来运行报告(因为'Surrogate Key Date'对构建报告的最终用户没有任何意义) – ps0604

+0

我明白了 - 好吧,在这种情况下,首先使用代理键没有任何好处。根据'DATE'和'Account number'创建一个复合主键并使用它。 HANA将在内部为该连接创建一个隐藏列,并且复合键的所有处理都将在该列上完成。显而易见的主要缺点是额外的空间要求,但您也可以使用代理键。 –