1

企業を表す 9 つの異なるデータベースがあり、すべて同じ SQL Server 2008 マシン上にあります。

各企業データベースには、gltrxdet_vw というビューがあります。これは複数のテーブルにわたって定義されており、実行できます

SELECT x, y, z, SUM(amt) AS amt_ 
FROM gltrxdet_vw
WHERE trxdate BETWEEN '2012-04-01' AND '2012-04-30'
GROUP BY x, y, z

trxdate に基づくテーブルのインデックスにより、非常に迅速に結果が返されます。

統合されたアカウントの場合、9 つの会社をグループ化する必要があるため、私の計画では、効果的なビューを作成することでした。

CREATE VIEW mcomp_gltrxdet_vw AS
 SELECT x, y, z, trxdate, amt
 FROM companydb1..gltrxdet_vw
  UNION ALL
 SELECT x, y, z, trxdate, amt
 FROM companydb2..gltrxdet_vw
  UNION ALL
...
  UNION ALL
 SELECT x, y, z, trxdate, amt
 FROM companydb9..gltrxdet_vw

したがって、理論的には、次のクエリを作成できます

SELECT x, y, z, SUM(amt) AS amt_
FROM mcomp_gltrxdet_vw
WHERE trxdate BETWEEN '2012-04-01' AND '2012-04-30'
GROUP BY x, y, z

x、y、および z は、トランザクション情報を含むフィールドです (実際には、これらのフィールドがさらに多くなり、より複雑な WHERE 条件がクエリに渡されますが、説明のために上記で十分であることを願っています)。

私の質問は次のとおりです。SQL Server は、結果を統合する前に、基になるビューに WHERE 条件を一度に 1 つずつ正しく適用しますか? それとも、trxdate フィルターを適用する前に、巨大なテーブルを構築するのに何年もかかるのでしょうか? テーブルのデータが非常に少ないため、このソリューションが正しくスケーリングされるかどうかはわかりません。異なるデータベース間でクエリを実行しても違いはありますか?

関連するメモとして、応答のいくつかはクエリプランを確認することになると確信しています-これらのツールがどこにあるか/どのように動作するかについての適切なチュートリアルに誰もリンクできますか? SSMS の深いところに投げ込まれました (MySQL コマンドラインにもっと慣れました!)

前もって感謝します

4

1 に答える 1

1

基本的に、ビューのこのユニオンオール パターンは (分散) パーティション ビューと呼ばれるものであり、SQL Server はそれを強力にサポートしています。クエリ オプティマイザは、これを問題なく処理します。

とにかく、実行計画を見て確認することをお勧めします。参考になるので、この回答のコメントに Ed Harper から提供されたリンクを追加します。

于 2012-06-26T10:42:40.303 に答える