2016-07-05 102 views
0

我有一个表Transactions它有一个列存储索引和存储74445000行。从日期函数查询性能VS日期维度表

我有一个像下面

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

我琢磨了可以做在包含月份和年份的所有日期可能比使用SQL日期上面的查询更好的日期维度表连接的查询功能。

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

+1

你可以在'Dimension'表上用'join'编写另一个查询,并比较两个查询的性能 –

+0

或者你可以创建两个*持久*计算列'Month'&'year',这样你就不必在'select'中使用任何'Date'函数 –

回答

1

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

由于Columnstore索引不支持计算列,因此没有什么大的选择(SQL Server 2016)。