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