浅析SQL Server的分页方式 ISNULL与COALESCE性能比较

2020-07-04 06:03:30易采站长站整理

从上看出二者性能并未有什么太大差异,我们不需要太担心了吧,当然上述场景并未完全覆盖,至少还是能说明一部分。上述我们得到的结果查看的执行时间,现在我们再来看看二者查询执行计划。


SELECT COALESCE((SELECT MAX(index_id) FROM sys.indexes WHERE [object_id] = t.[object_id]), 0)
FROM sys.tables AS t;
SELECT ISNULL((SELECT MAX(index_id) FROM sys.indexes WHERE [object_id] = t.[object_id]), 0)
FROM sys.tables AS t;

 

上述可能不太准确,还和硬件配置有关,也有可能COALESCE的性能差与ISNULL。二者性能应该是没什么很大差异。

(6)ISNULL和自然语言描述不一致

为何是和自然语言描述不一致呢?也就是说我们当判断某个值为NULL会做什么,不为NULL再做什么,这时用查询语言SQL描述如下:


IF ISNULL(something)
-- do something

我们用自然语言角度来看,翻译为如果something为NULL我们做什么,这个时候是不一致的。因为在SQL Server中没有布尔值类型,上述我们只能进行如下转换


IF something IS NULL
-- do something
-- or
IF ISNULL(something, NULL) IS NULL
-- do something
-- or
IF ISNULL(something, '') = ''
-- do something

  (7)利用GUID看看奇葩的ISNULL

在本节介绍之前我们再来看看一个例子,从而颠覆你的想法,让你发狂。

SELECT ISNULL(NEWID(), 'JeffckyWang') AS Col1

这样看是没问题,我们将其插入到表中,再看对其列的描述


SELECT ISNULL(NEWID(), 'JeffckyWang') AS Col1
INTO dbo.IsNullExample2;
EXEC sp_help 'dbo.IsNullExample2';

表中数据确实存在,但是对列的描述是可空的。

总结

上述重点讲述了COALESCE和ISNULL函数区别之处,通过本节的讲述二者的场景和区别,我们是不是应该有了一点想法,到底是该用COALESCE还是ISNULL呢?大部分情况下还是利用COALESCE为好,一是此函数是作为SQL标准函数,第二个相对于ISNULL它可以支持更多参数,而ISNULL则需要嵌套,而对于ISNULL难道就没有应用场景了吗,当然有在查询数据时判断数据是否为NULL,这种情况下利用ISNULL,例如,如下

								 
			 
相关文章 大家在看