有人能解释一下sql server中的“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
2条答案
按热度按时间mklgxw1f1#
我在中测试了这两个查询
Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
. 它们之间没有性能差异,只是select case以毫秒为单位略微领先。对于if-else逻辑:
选择datediff(毫秒,'2020-07-09 04:40:21.170','2020-07-09 04:40:27.693')
--6523毫秒
对于大小写逻辑:选择datediff(毫秒,'2020-07-09 04:41:35.580','2020-07-09 04:41:41.973')
--6393毫秒
但是,正如@dalek所提到的,它们通常有不同的用例。选择有助于一次设置多个变量值。否则,必须分别设置值。如果是else逻辑,可以在内部有很多业务逻辑。选择案例是单个陈述。
2w3kk1z52#
case语句将在性能基础上正常工作。因为case语句我们可以直接在任何select查询中使用,而不必指定transact-sql语法,但是如果您要使用if语句,它将在其中作为transact-sql查询语法使用(因为您已经使用了select语句两次),但是在case中您只能使用它一次。