У меня есть два сервера баз данных, подключенных через связанные серверы. Обе они являются базами данных SQL Server 2008R2, и связанное соединение с сервером осуществляется через обычную ссылку «SQL Server» с использованием контекста безопасности текущего имени входа. Связанные серверы находятся в одном центре данных, поэтому проблема с подключением не должна быть.
Я использую следующий запрос, чтобы проверить, какие значения столбца identifier
доступны удаленно, но не локально.
SELECT
identifier
FROM LinkedServer.RemoteDb.schema.[TableName]
EXCEPT
SELECT DISTINCT
identifier
FROM LocalDb.schema.[TableName]
На обеих таблицах есть некластеризованные индексы по столбцу identifier
. Локально около 2,6 млн строк, удаленно только 54. Тем не менее, при рассмотрении плана запроса, 70% времени выполнения отводится «выполнению удаленного запроса». Кроме того, при изучении полного плана запроса 1
вместо предполагаемого количества локальных строк 2695380
(которое является числом предполагаемых строк при выборе только следующего запроса EXCEPT
).
При выполнении этого запроса, это действительно занимает много времени.
Это заставляет меня задуматься: почему это? Оценка "просто" далека или действительно удаленные запросы на связанных серверах настолько дороги?