1

ファクト コンステレーション スキーマ設計の SQL Server データ ウェアハウスがあります。4 つのオブジェクト/ビューに関するレポートを作成する必要があります。

  1. 販売実績 - ファクト テーブル [販売]
  2. 販売目標 - ファクト テーブル [目標]
  3. 株式 - ファクト テーブル [Inventory]
  4. インバウンド - ファクト テーブル [トランジット]

すべてのオブジェクト/ビューには同じ署名があります。次に例を示します。

Sales actuals: ProductID, RegionID, SalesManagerID, ..., <product data>, <region data>, ..., Quantity;
Sales targets: ProductID, --null--, SalesManagerID, ..., <product data>, -----null----, ..., Quantity;
Stocks:        ProductID, RegionID, -----null-----, ..., <product data>, <region data>, ..., Quantity;
...

このような署名を実現するために、各オブジェクト/ビューはファクト テーブルと 5 ~ 6 個のディメンション テーブルから取得されます。ディメンション テーブルはオブジェクト間で共有されます (製品データを含むテーブル、地域データを含むテーブルなど)。

各ビューの計算に 5 ~ 10 秒以上かかる SQL はありません。

それらを 1 つのレポートにまとめたいので、次のようにしています。

Select * from [Sales actuals]
UNION
Select * from [Sales targets]
UNION
Select * from [Stocks]
UNION
Select * from [Inbound]

そしてここで、SQL は 1 分以内にデータの 10% を取得することさえできません。クエリ オプティマイザーは、4 つのファクト テーブルを 1 つの大きなベクトルに結合し、ディメンション テーブルをアタッチしているようです。これにより、システムが狂ってしまいます。

私が望むのは、ビュー/オブジェクトをカプセル化したままにすることです。つまり、エンジンは最初にビューを計算する必要があります (4 * 5 秒 = 20 秒)。その後、Union 操作 (10 秒 + オーバーヘッド) を適用して結果を取得します。

質問: ネストされたビューでクエリの最適化を無効にして、そのような「計算カプセル化」を実現するにはどうすればよいですか?

コンパイラと同じように、最初にファクト テーブルを結合してからディメンション テーブルを結合します。これはオプションではありません。コードを解釈可能にして再利用可能にしたいからです。

前もって感謝します!コンスタンティン

4

1 に答える 1