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 identifiersą 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ń 1zamiast 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?