リンクサーバー経由で接続された2つのデータベースサーバーがあります。どちらもSQL Server 2008R2データベースであり、リンクサーバー接続は、現在のログインのセキュリティコンテキストを使用して、通常の「SQL Server」リンクを介して行われます。リンクされたサーバーは両方とも同じデータセンターにあるため、接続は問題になりません。
次のクエリを使用して、identifier
ローカルではなくリモートで使用可能な列の値を確認します。
SELECT
identifier
FROM LinkedServer.RemoteDb.schema.[TableName]
EXCEPT
SELECT DISTINCT
identifier
FROM LocalDb.schema.[TableName]
両方のテーブルには、列に非クラスター化インデックスがありますidentifier
。ローカルは約260万行、リモートは54行のみです。しかし、クエリプランを見ると、実行時間の70%が「リモートクエリの実行」に費やされています。また、完全なクエリプランを調べる場合、推定ローカル行の数1
は2695380
(の後に来るクエリのみを選択した場合の推定行の数)の代わりになりますEXCEPT
。
このクエリを実行すると、実際に時間がかかります。
不思議に思う:これはなぜですか?推定値は「ちょうど」外れていますか、それともリンクサーバーでのリモートクエリは本当にそれほど高価ですか?