我注意到在工作中有一些查询,而SO则使用以下形式的限制:
isnull(name,'') <> ''
有没有一个特别的原因,为什么人们这样做,而不是更简洁
name is not null
这是遗产还是性能问题?
解决方法
where isnull(name,'') <> ''
相当于
where name is not null and name <> ''
这反过来相当于
where name <> ''
(如果名称为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 <> '' */
哪个应该给你你需要的执行计划。