SQL Server - OpenQuery против 4-х частей имя - PullRequest
0 голосов
/ 28 мая 2018

Представление, ссылающееся на удаленный сервер

OpenQuery

Какая производительность лучше?

Почему производительность хороша?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Здесь поздно, но разница, по сути, в том, что 4 части запроса выполняются локально, поэтому не могут использовать индексы или ключи, так как локальный сервер не знает о них.Вместо этого он по существу извлекает весь объект, затем применяет фильтр.В маленькой таблице вы вряд ли заметите разницу, но в таблице с миллионами строк вы заметите разницу.По сути, Openquery указывает удаленному серверу выполнить запрос от его имени, а затем передать результат обратно.

Общее правило, которое я бы сказал, таково;НИКОГДА не присоединяйтесь к столу, используя 4 части.Присоединяйтесь только с помощью Openquery, и я бы даже избегал этого там, где это возможно, но это скорее личное предпочтение.

Однако выполнение SP из 4 частей, т.е. EXEC ServerName.DBName.SchemaName.ObjectName, по сути, такое же, так как оно также говоритудаленный сервер для выполнения запроса от его имени.

0 голосов
/ 28 мая 2018

AFAIK, это зависит от типа вашего удаленного сервера.С последней версией SQL (2016) на обоих серверах (локальных и удаленных) я не заметил никакой разницы.Если ваш удаленный сервер - это что-то еще (postgres, mysql ...), вам действительно следует использовать OpenQuery, поскольку он выполняет запрос на удаленном сервере, получая только правильный набор результатов.Если вы используете 4-компонентное имя, SQL-сервер упорядочит и отфильтрует локально.

Например, возьмите таблицу записей на 4 миллиона и выполните запрос, например:

SELECT * FROM reoteserver.database.schema.table where id = 4

С помощью openquery,Сервер sql получит только запись с идентификатором 4. Без него он получит всю таблицу, а затем отфильтрует ее, чтобы получить идентификатор 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...