Why would this version of a stored procedure CREATE PROC TEST @EquipID varchar(5), @SDate datetime = NULL, @EDate datetime = NULLASIF @SDate IS NULL SET @SDate = DATEADD(yy,-1,GETDATE())IF @EDate IS NULL SET @EDate = GETDATE()SELECT SUM(LABOR_AMT_SCC) AS 'TotalCost'FROM SERV_CALL_COST A INNER JOIN SERIAL_EQUIP B ON A.SHIP_TO = B.CUSTOMER_NUMBER AND A.SERIAL = B.SERIAL AND A.Model = B.ModelWHERE B.EQUIP_ID = @EquipID AND TRANS_DATE_SCC BETWEEN @SDate AND @EDate
Be slower then this version CREATE PROC TEST @EquipID varchar(5), @SDate datetime = '4/13/02', @EDate datetime = '4/13/03'ASSELECT SUM(LABOR_AMT_SCC) AS 'TotalCost'FROM SERV_CALL_COST A INNER JOIN SERIAL_EQUIP B ON A.SHIP_TO = B.CUSTOMER_NUMBER AND A.SERIAL = B.SERIAL AND A.Model = B.ModelWHERE B.EQUIP_ID = @EquipID AND TRANS_DATE_SCC BETWEEN @SDate AND @EDate
NOTE: The Only difference is that in the 2nd one I've hard coded the default values for the date range.The 2nd query is 4 times faster.