我注意到许多在工作中以及在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 <> '' */
哪个应该给您所需的执行计划。