Mam dwa serwery bazy danych, połączone przez połączone serwery. Obie są bazami danych SQL Server 2008R2, a połączone połączenie z serwerem jest nawiązywane za pomocą zwykłego łącza „SQL Server”, z wykorzystaniem kontekstu bezpieczeństwa bieżącego logowania. Połączone serwery znajdują się w tym samym centrum danych, więc połączenie nie powinno stanowić problemu.
Korzystam z następującego zapytania, aby sprawdzić, które wartości kolumny identifier
są dostępne zdalnie, ale nie lokalnie.
SELECT
identifier
FROM LinkedServer.RemoteDb.schema.[TableName]
EXCEPT
SELECT DISTINCT
identifier
FROM LocalDb.schema.[TableName]
W obu tabelach znajdują się indeksy nieklastrowane w kolumnie identifier
. Lokalnie jest około 2,6 miliona wierszy, zdalnie tylko 54. Jednak patrząc na plan zapytań, 70% czasu wykonania jest poświęcone na „wykonanie zapytania zdalnego”. Ponadto podczas badania pełnego planu zapytań 1
zamiast szacowanych wierszy lokalnych 2695380
(jest to liczba szacowanych wierszy przy wyborze tylko zapytania następnego EXCEPT
).
Podczas wykonywania tego zapytania rzeczywiście zajmuje to dużo czasu.
Zastanawiam się: dlaczego? Czy oszacowanie jest „po prostu” daleko, czy zdalne zapytania na połączonych serwerach są naprawdę tak drogie?