私たちの SQL Server 2012 Enterprise セットアップには説明できないパフォーマンスの問題があり、皆さんにアイデアがあれば幸いです。
集計する多数の int 列を含むファクト テーブルと、地域ディメンション テーブルがあります。
これは、ファクト テーブルの構造です。
- regionId (整数)
- 収益 (10 進数 10,2)
- orderIntake (10 進数 10,2)
これがディメンション テーブルの構造です。
- worldRegion(varchar(100)9
- クラスター (varchar(100))
- 国 (varchar(100))
- regionId (整数)
ファクト テーブルとディメンション テーブルは、regionId 列に対する INNER JOIN を介して接続されます。国を制限しない限り、これのパフォーマンスは非常に優れています。
例えば
SELECT SUM(revenue) FROM factTable f INNER JOIN regionDim r ON f.regionId=r.regionId
高速です (<1 秒)。
でも
SELECT SUM(revenue) FROM factTable f INNER JOIN regionDim r ON f.regionId=r.regionId WHERE r.country IN ('France','Germany')
約 500k レコードではかなり遅い (> 8 秒)。
次のような指標があります。
- regionId 列のファクト テーブルの ColumnStore インデックス
- ディメンション テーブルのクラスター化インデックス (regionId、country、cluster、worldRegion)
インデックスまたは全体的な構造の観点から変更できることはありますか?