Обновление: после некоторых экспериментов кажется, что медленная ситуация - это когда я вызываю «SELECT min (column) FROM theTableValuedFunction ()».
Я буду вызывать локальный сервер ServerLocal и другойудаленный сервер ServerForeign.У меня есть SQL-запрос в табличной функции на ServerLocal, который выглядит следующим образом:
SELECT columns
FROM ServerForeign.database.tableA
JOIN ServerForeign.database.tableB ON columns
JOIN ServerForeign.database.tableC ON columns
JOIN ServerForeign.database.tableD ON columns
JOIN ServerForeign.database.tableE ON columns
JOIN ServerForeign.database.tableF ON columns
WHERE conditions
Итак, вот мои вопросы:
Когда я запускаю это, ServerLocal передает весь запрос к ServerForeignи попросить его выполнить само объединение и вернуть результаты за одну операцию, или он захватывает целые таблицы, бесполезно передавая все только для того, чтобы отфильтровать его / объединить их на ServerLocal?
«Условия WHERE» втабличная функция очень общая;в различных местах, где вызывается табличная функция, она применяется далее, где условия.Есть ли какая-то эффективность, которую можно получить, переместив операторы where в код функции с табличным значением или нет никакой разницы?
Будет ли существенным преимуществом помещение функции с табличным значением в ServerForeign и вызов ее из ServerLocalили я все равно буду терпеть такую же медлительность, просто передавая данные?Если я перевожу табличную функцию в ServerForeign, а ServerLocal применяет предложение WHERE в точке, где она вызывает табличную функцию, то достаточно ли у SQL Server достаточно умного, чтобы передать это предложение WHERE из ServerLocal в ServerForeign и использовать его для уменьшения количествапереданные строки, или он бездумно возвращает все их и отбрасывает строки, которые не совпадают?
По различным внешним причинам я предпочел бы НЕ размещать какой-либо код на ServerForeign.Если есть способ запустить весь код SQL на ServerLocal и при этом эффективно работать с данными из ServerForeign, это было бы предпочтительным.