汽车是一个有CarType列的表。 CarType非空,可以包含2个值。 CarDonated和CarSold。哪个查询具有更好的性能 - 带有case语句的where子句?
我们从报告中传入参数以包含所有CarTypes或特定CarType(如CarDonated)。
方案1中的参数传入'Car'(对于所有CarTypes),'CarD'对于CarDonated,对于CarSold'CarS'。
select *
from Cars c
where c.CarType like @CarTypeParam + '%'
OR
参数表示脚本2道次在 '0'(对于所有CarTypes), 'CarDonated', 'CarSold'
select *
from Cars c
where c.CarType = case when @CarTypeParam = '0'
then c.CarType
else @CarTypeParam
end
哪个场景/编码方法更好?我不太熟悉where子句中的case语句。在这两种情况下,优化器是否仍然能够在CarType上使用索引?哪个编码更好?
的SQL Server 2008 R2(与沿SSRS)
目前CASE也不会工作,因为它测试c.CarType +'%'的相等性,而不是使用LIKE –
@AlexK。 ,哎呀,这是一个错字。应该只是“c.CarType”。固定。 – Gabe
@MartinSmith,如果CarType上没有索引,那么两者之间的性能会有很大差异吗? – Gabe