I’ve put my hand up to to a quick 10 - 15 minute slot at the London user group, so I was getting my scripts together to do a presentation based on my UDF Overhead blog entry. Naturally this being my first time talking, I wanted to make sure that I was accurate in terms of the statement timings and how I was interpreting the results. After running the examples a few times I started to notice a discrepancy that I was wasn't expecting.
Executing the UDF with ‘SET STATISTICS TIME ON’ was visibly slower that without. In fact in profiler the duration time with stats time on was 2056ms, without it duration time was 233ms. This was the only difference. Testing on 2008 showed the same effect but to a lesser degree.
Heres the script im testing with.
Drop Function GetSalesCommission go Create Function GetSalesCommission(@SalesAmount money) returns money as begin Declare @CommissionAmount money Select @CommissionAmount = (@SalesAmount/100.0) * 5 return @CommissionAmount end go
SET STATISTICS TIME ON select sum(dbo.GetSalesCommission(SubTotal)) as Commission from Sales.SalesOrderHeader go SET STATISTICS TIME OFF select sum(dbo.GetSalesCommission(SubTotal)) as Commission from Sales.SalesOrderHeader go
And a screen shot of the profiler output
With this in mind,I’m certainly going to re-asses a few performance evaluation practices. It doesn't completely negate my previous post on UDF Overheads but a large portion of the timings would seem to be related to this.
