我在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推荐哪个陈述?
答案 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
这可能看起来有点违反直觉,因为您正在增加代码的大小,但是当广泛利用特定视图时,我们已经看到了一些适度的性能提升。