Я хранимая процедура, которая принимает ввод даты, позже установить на текущую дату, если значение не передаются в:SQL выполнение плана бедны хранимая процедура - параметр нюхает
CREATE PROCEDURE MyProc
@MyDate DATETIME = NULL
AS
IF @MyDate IS NULL SET @MyDate = CURRENT_TIMESTAMP
-- Do Something using @MyDate
У меня возникли проблемы в случае, если @MyDate
передается как NULL
, когда хранимая процедура сначала компилируется, производительность всегда ужасная для всех входных значений (NULL
или иначе), если дата или текущая дата передаются при скомпилированной производительности хранимой процедуры штраф для всех входных значений (NULL
или иным образом).
Что же смущает то, что плохое выполнение плана, который генерируется в страшен даже тогда, когда значение @MyDate используется фактическиNULL
(и не установлен CURRENT_TIMESTAMP
заявлением IF)
Я ве обнаружил, что отключение параметра нюхает (от подмены параметра) фиксирует мою проблему:
CREATE PROCEDURE MyProc
@MyDate DATETIME = NULL
AS
DECLARE @MyDate_Copy DATETIME
SET @MyDate_Copy = @MyDate
IF @MyDate_Copy IS NULL SET @MyDate_Copy = CURRENT_TIMESTAMP
-- Do Something using @MyDate_Copy
Я знаю, что это что-то делать с параметром нюхает, но все примеры, которые я видел в «параметре нюхает испортился» включили хранимую процедуру ing, скомпилированный с не представительным параметром, переданным, но здесь я вижу, что план выполнения ужасен для всех мыслимых значений, которые SQL-сервер может считать, что этот параметр может принимать значение в точке, где выполняется оператор - NULL
, CURRENT_TIMESTAMP
или иным образом ,
У кого-нибудь есть представление о том, почему это происходит?
Это интересно, но вы не на самом деле задавая вопрос где-нибудь здесь ... – cjk
Только что заметил, что :-) – Justin