Скорость множественного назначения переменных в T-SQL - PullRequest
0 голосов
/ 10 октября 2008

Представьте, что у меня есть фрагмент кода инициализации в верхней части хранимой процедуры с несколькими назначениями переменных:

SET @proc = 'sp_madeupname'
SET @magic_number = 42
SET @tomorrows_date = DATEADD(dd, 1, GETDATE())
...

Ясно, что все вышеперечисленное выполняется быстрее, так как один SELECT будет быстрее:

SELECT
     @proc = 'sp_madeupname'
    ,@magic_number = 42
    ,@tomorrows_date = DATEADD(dd, 1, GETDATE())
...

Но насколько быстрее? Скажем, если эта хранимая процедура была выполнена как часть цикла, несколько тысяч раз, будет ли она иметь какое-то существенное влияние на производительность?

Ответы [ 2 ]

3 голосов
/ 10 октября 2008

В этом случае SELECT выигрывает с точки зрения производительности при выполнении нескольких назначений.

Вот еще немного информации об этом:

SELECT против SET: оптимизация циклов

0 голосов
/ 10 октября 2008

Я думал об этом, но никогда не проверял.

По моему опыту, оптимизатор довольно хорош, поэтому я думаю, что это не имеет значения, но я бы запустил несколько тестов, если бы вы думали, что это действительно полезно.

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

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

...