ISNULL vs IS NULL in SQL Server



我有与isnull()函数与is null SQL Server 中的关键字相关的问题。

我知道在SQL语句的where子句中编写以下条件会导致性能不佳

isnull(@C_FirstName, '') <> ''

我们可以将其替换为

 (@C_FirstName IS NOT NULL AND @C_FirstName <> '') 

where条款中

但是,在 if 条件下,我会获得任何性能提升吗?

下面是两个选项的示例

选项#1:

If `isnull(@C_FirstName, '') <> ''`  

选项#2:

If `(@C_FirstName IS NOT NULL AND @C_FirstName <> '')`

从选项 1 和选项 2 中,建议使用哪种语句?

ISNULL(或 COALESCE)在组合集(例如使用联接或筛选数据)时会影响性能。由于您要对要与之进行比较的属性应用操作,因此优化程序将不依赖于索引排序。数据库引擎不会有效地使用现有索引。转述自第 52 页 - 查询 SQL Server 2012 Microsoft - 培训工具包

在我们的数据库系统中,我们目前正在将视图中的类似代码替换为如下所示的内容:

SELECT ISNULL(Salesman, '')
FROM Order

对此:

SELECT CASE WHEN IS NULL Salesman THEN '' ELSE Salesman END
FROM Order

这似乎有点违反直觉,因为您正在增加代码的大小,但是当广泛使用特定视图时,我们已经看到了一些适度的性能提升。

最新更新