2016-07-05 5 views
0

私は、列のストアインデックスと74445000の行を格納しているTransactionsテーブルを持っています。日付関数からのクエリパフォーマンスVS日付ディメンションテーブル

は私が

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

の下に、私はそれがSQLの日付を使用して上記のクエリよりも良いかもしれすべての日付の月と年が含まDateディメンションテーブルにJOINを行うことも熟慮していますのようなクエリを持っています機能。

この前提を確認したり、詳細を提供できるリソースを指している人はいますか?

+1

'Dimension'テーブルに' join'を使って別のクエリを書くことができ、両方のクエリの性能を比較することができます –

+0

または、2つの* persisted *計算カラム 'Month'&' year'を作成して、 'select'で' Date'関数を使います –

答えて

1

元の列を変更すると、クエリのパフォーマンスに影響します。クエリの月&の計算には、非常に効率的なバッチ実行モードが必要です。これにより、選択肢が非常に薄く見えるようになります。 さらに、結合が整数/ bigint列で実行される場合、セグメントの削除を取得してクエリのパフォーマンスを向上させることができますが、任意の文字列を使用すると、クエリと比較して膨大な時間がかかりますintデータ型。 別の言葉では、不必要な頭痛。

Columnstoreインデックスはまだ計算列をサポートしていないため、大きな選択肢はありません(SQL Server 2016)。