SQL Server中的ISNULL vs IS为NULL

时间:2012-12-04 10:41:32

标签: sql sql-server

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

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

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

我们可以用

替换它
 (@C_FirstName IS NOT NULL AND @C_FirstName <> '') 
where子句中的

但是如果有条件,我会获得任何性能提升吗?

以下是带有两个选项

的示例

选项#1:

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

选项#2:

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

从选项1和选项2推荐哪个陈述?

1 个答案:

答案 0 :(得分:2)

ISNULL(或COALESCE)可能会在组合集时影响性能,例如加入或过滤数据时。因为您正在对要进行比较的属性应用操作,所以优化器不会依赖索引排序。数据库引擎无法有效地使用现有索引。 转述自第52页 - 查询Microsoft SQL Server 2012 - 培训套件

在我们的数据库系统中,我们目前正在使用以下内容替换类似的代码:

SELECT ISNULL(Salesman, '')
FROM Order

到此:

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

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