我有一个表Transactions
,它有一个列存储索引并存储了74445000行。
我有一个如下的查询
SELECT
CustomerNumber,
MONTH(CreationDate) AS m,
YEAR(CreationDate) AS y,
CurrencyID AS c
FROM Transactions
我正在考虑可能在Date Dimension表上进行JOIN,其中包含所有日期的月份和年份可能比使用SQL日期函数的上述查询更好。
任何人都可以验证这个假设和/或指向可以提供详细信息的资源吗?
答案 0 :(得分:1)
原始列的任何更改都会对查询性能产生影响。用于计算月份和时间在您的查询中,您应该获得一个非常有效的批处理执行模式,这将使备选方案看起来很苍白。 另外,如果您的连接将在整数/ bigint列上完成,那么您可能能够获得可以提高查询性能的段消除,但是对于任何字符串列,将使查询持续与int相比难以置信的时间量数据类型。 换句话说 - 不必要的头痛。
由于Columnstore Indexes尚不支持计算列(SQL Server 2016),因此没有其他重大选择。