我注意到许多在工作中以及在SO上使用形式限制的查询:

isnull(name,'') <> ''


人们这样做有什么特别的原因吗?

name is not null


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

最佳答案

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


相当于

where name is not null and name <> ''


反过来相当于

where name <> ''


(如果名称IS NULL该最终表达式的计算结果为未知,并且该行未返回)

如以下测试所示,使用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 <> '' */


哪个应该给您所需的执行计划。

sql - isull vs为null-LMLPHP

09-10 01:54