Присоединиться к связанному серверу или к хост-серверу?


Вот такая ситуация: у нас есть база данных Oracle, к которой нам нужно подключиться, чтобы получить некоторые данные. Поскольку получение доступа к указанной базе данных Oracle-это настоящая боль (в основном бюрократическое препятствие больше, чем что-либо другое), мы просто планируем связать ее с нашим SQL-сервером и использовать ссылку для доступа к данным по мере необходимости.

Для одного из наших приложений мы планируем создать представление, чтобы получить необходимые нам данные. Теперь нужные нам данные объединены из двух таблиц. Если мы сделаем это, что будет быть предпочтительнее?

Это (в псевдо-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.
3 2

3 ответа:

Если внутреннее соединение значительно уменьшает общее число строк, то вариант 1 приведет к гораздо меньшему сетевому трафику (так как вам не придется все строки из таблицы 1 проходить через ссылку БД

Я бы выбрал ваш первый вариант, особенно если ваш запрос содержит предложение where для выбора подмножества данных в таблицах.

Это потребует меньше работы на обоих серверах, если предположить, что в таблицах сервера Oracle имеются индексы, поддерживающие операцию соединения.

То, что сказал hamishmcn, применимо.

Кроме того, SQL Server на самом деле ничего не знает об индексах, статистике или кэше, хранящихся на сервере oracle. Поэтому сервер oracle, вероятно,может выполнять гораздо более эффективную работу с соединением, чем sql server.