企業を表す 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 コマンドラインにもっと慣れました!)
前もって感謝します