У мене є два сервери баз даних, підключені через пов'язані сервери. Обидва є базами даних 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
), замість ( приблизно, кількість оцінюваних місцевих рядків ).
Виконання цього запиту дійсно займає багато часу.
Мене змушує замислитися: чому це? Невже оцінка "просто" відсторонена, чи віддалені запити на пов'язаних серверах насправді такі дорогі?