對於「可選」參數,where子句中的ISNULL與NULL OR是否存在顯着的性能差異?例如:SQL可選參數 - 性能差異
實施例1:
SELECT * FROM tblEmployees WHERE (@EmployeeID IS NULL OR EmployeeID = @EmployeeID);
與
實施例2:
SELECT * FROM tblEmployees WHERE EmployeeID = ISNULL(@EmployeeID, EmployeeID);
我認爲第二種方法是更可讀的,但好奇,如果有一個的性能損失採用第二種方法與第一種方法。
查詢計劃在SQL Server中是一樣的,我記得Oracle對待它的方式不同。 – hardkoded
正如所寫的,在@ EmployeeID不爲null的情況下,兩者都會阻止索引查找。如果您添加'OPTION(RECOMPILE)' –
,那麼可以避免使用這兩種方法來避免這種查詢的性能問題並非您選擇實現條件的不同方式,而是查詢計劃的兌現,提供了一組參數,但對另一組參數可能會很糟糕。這是捕獲所有查詢的一個衆所周知的問題。衆所周知,有很多關於它的博客文章。 –