if I have a function
ALTER FUNCTION [dbo].[GetCycleDate]
(
)
RETURNS DATE
AS
BEGIN
DECLARE @CYC_DT DATE
SELECT
@CYC_DT = CYC_DT
FROM
CYC_DT
WHERE
CURR_CYC_IND = 'C'
RETURN @CYC_DT
END
For a very large table, will these two SQLs perform almost the same?
SELECT
*
FROM
[dbo].Table S
INNER JOIN dbo.CYC_DT D ON
S.GL_DT = D.CYC_DT AND
D.CURR_CYC_IND = 'C'
SELECT
*
FROM
[dbo].Table S
WHERE
S.GL_DT = dbo.GetCycleDate()
I know avoiding the function is safer, but for testing purposes, I want to be able to rig the function to return a hard coded result without impacting the testing done by other people who are relying on a different date to be set in the Cycle date table. I want to be able to switch to a different date on the without impacting anyone else.
Generally a bad idea to do this, as the optimizer is more limited in what it can do for you when scalar UDFs are involved.:
http://blogs.msdn.com/b/dfurman/archive/2009/12/02/query-performance-scalar-udfs-and-predicate-pushdown.aspx
http://www.sql-server-performance.com/2005/sql-server-udfs/
Since your scalar UDF isn't parameterized, and your sample query is simple, you might get away with it, but you'd have to test to be sure.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With