在sql Server中使用效率更高:pow(x,1/2)还是sqrt(x)?哪一个成本更低,哪一个更快?
解决方法
数学上:SQRT只是POWER的一种特殊形式,使用1/2作为指数
但在sql Server中,实现方式不同. POWER能够将任何浮点作为第二个参数,因此检测特殊情况并针对每种特殊情况进行不同的优化(p2 = 1 => identity和p2 = 0.5 => sqrt)会使POWER慢于它需要的速度.
如果需要平方根,请使用SQRT. POWER明显慢了约15%.
注意:确保你使用的是POWER not POW并且使用0.5而不是1/2(字面意思),因为1/2 = 0
比较测试(以及sql Server 2005的时序):
declare @dummy float -- to hold the result without generating resultset declare @t1 datetime,@t2 datetime,@t3 datetime declare @a float set @a = rand()*1000000 declare @i int select @t1 = getdate() set @i = 0 while @i < 10000000 begin select @dummy= sqrt(@a) set @i = @i + 1 end select @t2 = getdate() set @i = 0 while @i < 10000000 begin select @dummy= power(@a,0.5) set @i = @i + 1 end select @t3 = getdate() select Time_SQRT = datediff(ms,@t1,@t2),Time_POWER = datediff(ms,@t2,@t3) /* Time_SQRT Time_POWER ----------- ----------- 14540 16430 14333 17053 14073 16493 */