3

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

我知道在 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 中推荐哪个语句?

4

1 回答 1

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

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

于 2014-10-29T23:26:26.683 回答