首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >isnull vs is null

isnull vs is null
EN

Stack Overflow用户
提问于 2010-06-25 21:10:04
回答 10查看 38.2K关注 0票数 22

我注意到在工作中有许多查询,所以在表单中使用限制:

isnull(name,'') <> ''

有没有什么特别的原因让人们这样做,而不是更简洁

name is not null

这是遗留问题还是性能问题?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-06-25 21:14:40

where isnull(name,'') <> ''

等同于

where name is not null and name <> '' 

,它又相当于

where name <> ''

(如果命名为IS NULL,则最终表达式将计算为unknown,且不返回行)

使用ISNULL模式将导致扫描,并且效率较低,如下面的测试所示。

SELECT ca.[name],
       [number],
       [type],
       [low],
       [high],
       [status]
INTO   TestTable
FROM   [master].[dbo].[spt_values]
       CROSS APPLY (SELECT [name]
                    UNION ALL
                    SELECT ''
                    UNION ALL
                    SELECT NULL) ca 


CREATE NONCLUSTERED INDEX IX_TestTable ON dbo.TestTable(name)

GO


SELECT name FROM TestTable WHERE isnull(name,'') <> ''

SELECT name FROM TestTable WHERE name is not null and name <> ''
/*Can be simplified to just WHERE name <> '' */

这将为您提供所需的执行计划。

票数 41
EN

Stack Overflow用户

发布于 2010-06-25 21:13:59

is not null

将只检查该字段是否不为空。如果该字段包含空字符串,则该字段不再为null。

isnull(name, '') <> name

同时检查null和空字符串。

票数 16
EN

Stack Overflow用户

发布于 2010-06-25 21:12:34

isnull(name,'') <> :name(name is null or name <> :name)的缩写(假设:name从不包含空字符串,因此像这样的缩写可能是不好的)。

在性能方面,这取决于。where子句中的or语句会带来极差的性能。但是,列上的函数会影响索引的使用。像往常一样:配置文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3118213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档