[英]Case when versus if else statement
有人可以解釋 SQL 服務器中的“case when”和“if-else”之間是否存在性能差異? 在哪種情況下我應該使用哪種語句?
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
我在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
對於 IF ELSE 邏輯:
SELECT DATEDIFF(MILLISECOND,'2020-07-09 04:40:21.170','2020-07-09 04:40:27.693')
--6523 毫秒
對於 CASE 邏輯:SELECT DATEDIFF(MILLISECOND, '2020-07-09 04:41:35.580','2020-07-09 04:41:41.973')
--6393 毫秒
但是,正如@Dale K 所提到的,它們通常有不同的用例。 SELECT 有助於一次設置多個變量值。 如果是 Else 邏輯,則必須單獨設置值。 if else 邏輯,內部可以有很多業務邏輯。 SELECT CASE 是一個單一的聲明。
案例陳述將作為績效基礎正常工作。 因為 CASE 語句我們可以直接在任何 select 查詢中使用而無需指定 Transact-SQL 語法,但是如果您要使用 IF 語句,它將作為 Transact-SQL 查詢語法工作(因為您已使用 SELECT 語句兩次),但在如果您只能使用一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.