Будет ли использование функции для упрощения SQL-запросов значительно повышать производительность? - PullRequest
1 голос
/ 04 ноября 2011

У меня есть запрос, который использует сложный набор операторов CASE, некоторые вложенные, некоторые с инструкциями COALESCE of CASE, и это неудобно для управления.

Та же базовая логика применима примерно к 12 столбцамв SELECT, и может быть модульным и помещенным в функцию - с преимуществами, включая последовательность и простоту создания прототипов.

Поможет ли введение логики в функцию в значительной степени снизить производительность? Функции по своей природе медленнее?

SELECT извлекает из 5 таблиц, каждая из которых содержит около 100 000 строк, поэтому производительность имеет определенное значение.

SQL Server 2005

1 Ответ

3 голосов
/ 04 ноября 2011

Обычно выбор результата скалярной функции не причинит большого вреда, но фильтрация этим может легко стоить сотни секунд (хотя и не обязательно).

Если вам нужно отфильтровать по результату скалярной функции (WHERE col = dbo.scalar_function()), это часто помогает вместо этого создать встроенную табличную функцию.Он вернул бы его значение в качестве единственной строки таблицы результатов.Затем вы должны сделать inner join с результатом функции, эффективно отфильтровав возвращаемое значение.Это работает, потому что SQL Server всегда может развернуть встроенные табличные функции и встроить их в вызывающий запрос.

Обратите внимание, что этот трюк не будет работать, если функция является многошаговой.Их нельзя размотать.

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