Вот ситуация: у нас есть база данных Oracle, к которой нам нужно подключиться, чтобы получить некоторые данные. Поскольку получение доступа к указанной базе данных Oracle - это настоящая проблема (в основном бюрократическое препятствие больше, чем что-либо еще), мы просто планируем связать его с нашим SQL Server и использовать ссылку для доступа к данным по мере необходимости.
Для одного из наших приложений мы планируем создать представление для получения необходимых данных. Теперь нужные нам данные объединены из двух таблиц. Если мы это сделаем, что будет предпочтительнее?
Это (в псевдо-SQL, если такая вещь существует):
OPENQUERY(Oracle, "SELECT [cols] FROM table1 INNER JOIN table2")
или это:
SELECT [cols] FROM OPENQUERY(Oracle, "SELECT [cols1] FROM table1")
INNER JOIN OPENQUERY(Oracle, "SELECT [cols2] from table2")
Есть ли причина предпочесть одно другому? Следует иметь в виду одну вещь: мы ограничиваем время выполнения запроса для доступа к серверу Oracle.
Что ж ... вы когда-нибудь замечали, что вопросы кажутся намного более очевидными, когда вы их записываете, чем когда вы думаете о них? :-)


Если внутреннее соединение значительно уменьшает общее количество строк, то вариант 1 приведет к гораздо меньшему сетевому трафику (так как у вас не будет всех строк из table1, которые должны проходить через ссылку db
Я бы выбрал ваш первый вариант, особенно если ваш запрос содержит предложение where для выбора подмножества данных в таблицах.
Это потребует меньше работы на обоих серверах, если в таблицах на сервере Oracle есть индексы, поддерживающие операцию соединения.
То, что сказал Хамишмин, применимо.
Также, SQL Server на самом деле ничего не знает об индексах, статистике или кеше, хранящемся на сервере Oracle. Следовательно, сервер oracle, вероятно, может выполнять гораздо более эффективную работу с объединением, чем сервер sql.
это ограничение по времени, которое заставляет вас не идти к варианту 1, который, я думаю, был бы очевидным предпочтительным вариантом