У меня есть база данных, где я использую встроенные TVF (функции табличных значений) вместо представлений. Например, у меня могут быть две таблицы, называемые [модель автомобиля] и [производитель автомобиля], которые я объединяю в TVF [fnCarBrands].
Эти TVF затем вызываются другими TVF для дальнейшей обработки и создания отчетов. Поэтому я мог бы взять свою функцию [fnCarBrands] и присоединиться к таблице [Год покупки], чтобы сформировать функцию [fnCarBrandHistory]. И так далее для нескольких слоев TVF.
Я мог бы, вероятно, получить ту же функциональность, используя представления, так как мои встроенные TVF действительно являются просто объединением таблиц и других TVF.
Как производительность встроенных TVF, написанных таким образом, соотносится с представлениями?
источник
Ответы:
Оптимизатор запросов обрабатывает встроенную табличную функцию как представление:
Стол-функция мульти-оператор управляет более , как хранимые процедуры. Обычно они должны выполняться несколько раз, а не складываться в основной запрос:
источник
Вам нужно будет создать аналогичные представления для функций и запросить каждое из них, глядя на план выполнения, чтобы увидеть, что происходит с каждым из них.
источник
Конечно, создание представлений, которые вызывают другие представления, также снижает производительность. Не идите по этому маршруту. Пишите запросы, которые вам нужны, и не используйте ни TVF, ни представления, если вы хотите повысить производительность. Это является наслоение , что создает проблемы, это почти всегда плохо делать при запросе базы данных , и вы можете быстро закончить ударять предел количества таблиц вы можете ссылаться тоже, тем более , что вы часто в конечном итоге ссылки на одни и те же таблицы в разных слоях. Кроме того, хотя кажется, что его легче поддерживать, это не так. Попробуйте отладить или добавить столбец из-за нового требования, когда слой, который нужно исправить, находится внизу.
источник