0

我有一个表Transactions,它有一个列存储索引并存储了 74445000 行。

我有一个如下查询

SELECT 
  CustomerNumber,
  MONTH(CreationDate) AS m,
  YEAR(CreationDate) AS y,
  CurrencyID AS c 
FROM Transactions

我正在考虑可能在包含所有日期的月份和年份的日期维度表上执行 JOIN 可能比使用 SQL 日期函数的上述查询更好。

任何人都可以验证这个假设和/或指向可以提供详细信息的资源吗?

4

1 回答 1

1

对原始列的任何更改都会对查询性能产生影响。对于查询中的月份和年份的计算,您应该获得一个非常有效的批处理执行模式,这将使替代方案看起来很苍白。另外,如果您的连接将在整数/大整数列上完成,那么您可能可以获得段消除,这应该会提高您的查询性能,但是与 int 相比,使用任何字符串列都会使查询持续令人难以置信的时间数据类型。换句话说 - 不必要的头痛。

由于列存储索引尚不支持计算列(SQL Server 2016),因此没有大的替代方案。

于 2016-07-28T15:20:07.007 回答