Случай when по сравнению с оператором if else на сервере SQL - PullRequest
0 голосов
/ 09 июля 2020

Может ли кто-нибудь объяснить, есть ли разница в производительности между «case when» и «if-else» на SQL сервере? И в каком сценарии я должен использовать какой оператор?

IF DATENAME(weekday, GETDATE()) IN (N'Saturday', N'Sunday')
       SELECT 'Weekend';
ELSE 
       SELECT 'Weekday';
   

select
case when DATENAME(weekday, GETDATE()) IN (N'Saturday', N'Sunday') 
        then 'Weekend'
    else 
             'Weekday'
 end

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Я тестировал оба запроса в Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) . Между ними нет разницы в производительности, за исключением того, что SELECT CASE немного опережает время в миллисекундах.

SELECT GETUTCDATE()
GO
--IF DATENAME(SECOND, GETDATE()) IN (N'Saturday', N'Sunday')
--       SELECT 'Weekend';
--ELSE 
--       SELECT 'Weekday';
select
case when DATENAME(SECOND, GETDATE()) IN (N'Saturday', N'Sunday') 
        then 'Weekend'
    else 
    'Weekday'
 end
GO 50
SELECT GETUTCDATE()
GO

For IF ELSE logi c:

SELECT DATEDIFF (MILLISECOND, ' 2020-07-09 04: 40: 21.170 ',' 2020-07-09 04: 40: 27.693 ')

- 6523 миллисекунды

Для CASE logi c: SELECT DATEDIFF (MILLISECOND, '2020-07-09 04: 41: 35.580', '2020-07-09 04: 41: 41.973')

- 6393 миллисекунды

Но, как упоминал @Dale K, они обычно имеют разные варианты использования. SELECT помогает одновременно устанавливать несколько значений переменных. Если Else logi c, вам необходимо установить значения отдельно. Если еще logi c, внутри может быть много бизнес-logi c. SELECT CASE - это отдельный запрос.

0 голосов
/ 09 июля 2020

Оператор case будет работать правильно для производительности. Поскольку оператор CASE мы можем напрямую использовать в любом запросе выбора без указания синтаксиса Transact- SQL, но если вы собираетесь использовать оператор IF, в котором он будет работать как синтаксис запроса Transact- SQL (поскольку вы дважды использовали оператор SELECT ), но в случае, если вам нужно использовать его только один раз.

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