对于“可选”参数,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)' –
,那么可以避免使用这两种方法来避免这种查询的性能问题并非您选择实现条件的不同方式,而是查询计划的兑现,提供了一组参数,但对另一组参数可能会很糟糕。这是捕获所有查询的一个众所周知的问题。众所周知,有很多关于它的博客文章。 –