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秒的差异.这值得么?我建议可能有更大的优化领域.但阅读文章,这是一个很好的阅读.
小智 7
在这种情况下,ISNULL是最佳选择.因为,SQL Server将COALESCE函数解释为CASE语句.那么,你的查询
COALESCE(从SomeTable中选择前1个SomeValue,0)
将由SQL Server编写为
如果您观察到上述解释,"SomeTable"将被扫描两次.但ISNULL只会被评估一次.