Когда можно вызывать функции в SELECT? - PullRequest
1 голос
/ 08 декабря 2011

У меня есть некоторые хранимые процедуры, у которых есть предложение WHERE, например:

WHERE
    dbo.Users.DatePaidUpTo > GETDATE()

Это нормально?Будет ли это эффективнее:

DECLARE @currentDate DateTime
SET @currentDate = GETDATE()

    ....

WHERE
    dbo.Users.DatePaidUpTo > @currentDate

Если это более эффективно, как я могу сделать что-то подобное для представлений?Как этот синтаксис:

ALTER VIEW [dbo].[vw_Recommendations]
AS

DECLARE @currentDate DateTime
SET @currentDate = GETDATE()

SELECT
    ....

Неверно.

Ответы [ 2 ]

2 голосов
/ 08 декабря 2011

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

Если функция сложная или отнимает много времени, ее однократное выполнение может повысить производительность.

В вашем примере у вас будет представление без вызова функции, а затем оценка функции в SQL с использованием представления, например хранимой процедуры.

1 голос
/ 08 декабря 2011

Вы можете вызывать их по своему усмотрению, если это поле, которое всегда будет возвращать одно и то же значение, такое как GETDATE(), затем поместить его в переменную и ограничить количество вызовов базы данных.

Очевидно, что если результат от функции был переменным в зависимости от ввода в функцию, то сохраните его внутри выбора / где.

В конце дня это снизится до времени выполненияЕсли вы перебираете набор из 100 записей, то не стоит беспокоиться о разнице в производительности обоих методов.Если бы было более 100 миллионов записей, оптимизация была бы рассмотрена.

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