汽車是一個有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