我注意到在工作中有许多查询,所以在表单中使用限制:
isnull(name,'') <> ''
有没有什么特别的原因让人们这样做,而不是更简洁
name is not null
这是遗留问题还是性能问题?
发布于 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 <> '' */
这将为您提供所需的执行计划。
发布于 2010-06-25 21:13:59
is not null
将只检查该字段是否不为空。如果该字段包含空字符串,则该字段不再为null。
isnull(name, '') <> name
同时检查null和空字符串。
发布于 2010-06-25 21:12:34
isnull(name,'') <> :name
是(name is null or name <> :name)
的缩写(假设:name
从不包含空字符串,因此像这样的缩写可能是不好的)。
在性能方面,这取决于。where
子句中的or
语句会带来极差的性能。但是,列上的函数会影响索引的使用。像往常一样:配置文件。
https://stackoverflow.com/questions/3118213
复制相似问题