哪个更快COALESCE或ISNULL?

Sim*_*ith 25 sql-server performance

我理解这些函数之间的区别,但我的问题是,当检查单个空值时ISNULL会比使用COALESCE更快吗?

例如

COALESCE(SELECT TOP 1 SomeValue FROM SomeTable, 0)
Run Code Online (Sandbox Code Playgroud)

VS

ISNULL(SELECT TOP 1 SomeValue FROM SomeTable, 0)
Run Code Online (Sandbox Code Playgroud)

Ada*_*Dev 13

快速浏览一下,因为看到2之间的性能有很多不同的比较很有意思.我认为Adam Machanic的这篇博文在这个主题的性能基准测试中是最准确的,其中底线是:

......而且ISNULL的表现一直比COALESCE平均高出10%或12%

然而,我和他接着说的话有着相同的观点 - 差异是微不足道的 - 例如在他的测试中,一百万次执行平均表现出0.7秒的差异.这值得么?我建议可能有更大的优化领域.但阅读文章,这是一个很好的阅读.

  • 我的投票是为了"它值得吗?我建议可能有更大的优化领域"真实地说. (2认同)
  • “但这就是 6 秒和 5.3 秒之间的区别” - 老实说,我认为这非常重要,至少在他的微不足道的例子中。 (2认同)

小智 7

在这种情况下,ISNULL是最佳选择.因为,SQL Server将COALESCE函数解释为CASE语句.那么,你的查询

COALESCE(从SomeTable中选择前1个SomeValue,0)

将由SQL Server编写为

  1. 案件
  2. WHEN(选择TOPT SomeValue FROM SomeTable)不是NULL
  3. 那么(选择TOPT SomeValue来自SomeTable)
  4. ELSE 0
  5. 结束

如果您观察到上述解释,"SomeTable"将被扫描两次.但ISNULL只会被评估一次.


Sar*_*raz 3

ISNULL我认为会更快,因为它本身的函数/代码实现更少,使其比COALESCE