2016-07-05 69 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)。