tga*_*ews 20 sql t-sql sql-server sql-server-2005
我注意到在工作和SO上的一些查询正在使用表单中的限制:
isnull(name,'') <> ''
Run Code Online (Sandbox Code Playgroud)
有没有特别的原因让人们这样做,而不是更简洁
name is not null
Run Code Online (Sandbox Code Playgroud)
这是遗留问题还是性能问题?
Mar*_*ith 37
where isnull(name,'') <> ''
Run Code Online (Sandbox Code Playgroud)
相当于
where name is not null and name <> ''
Run Code Online (Sandbox Code Playgroud)
而这相当于
where name <> ''
Run Code Online (Sandbox Code Playgroud)
(如果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 <> '' */
Run Code Online (Sandbox Code Playgroud)
哪个应该为您提供所需的执行计划.
Jus*_*ner 14
is not null
Run Code Online (Sandbox Code Playgroud)
仅检查字段是否为空.如果该字段包含空字符串,则该字段不再为空.
isnull(name, '') <> name
Run Code Online (Sandbox Code Playgroud)
检查空字符串和空字符串.