Results 1 to 2 of 2

Thread: [RESOLVED] Thought I improved performance, but I guess not?

  1. #1

    Thread Starter
    PowerPoster MMock's Avatar
    Join Date
    Apr 2007
    Location
    Driving a 2018 Mustang GT down Route 8
    Posts
    4,513

    Resolved [RESOLVED] Thought I improved performance, but I guess not?

    Hi. I'm using SQL Server, I believe the version is 12.0. Front-end application is desktop windows C#.

    My boss wanted a couple columns added to a sql query then complained she thought they were slowing it down. This is when the C# code populates a grid.

    I was calling two functions to get the new data. So for the input we're testing with that returns 833 rows, it was making these two calls. From what I understand, on a row by row basis. They are commented out in the code below and replaced with the two lines following (the last two lines) which now use a table-valued function. I read that scalar functions can be slow and a table-valued function might be a better choice. I did see in SQL server that the time to run this stored procedure went down from over 15 seconds to 1 second. But when we run it from C#, it's still slow. Any idea what can be causing this, how I can troubleshoot the poor performance further? There are still 2 scalar function calls; should I replace those as well? But why is it quick in sql, slow in the application?
    Code:
    ALTER PROCEDURE xsp_JobsByCustomer
    	@CustNo varchar(8),
    	@bIncludeCP bit = null
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
    
    SELECT
    	Jobs.SONumber, 
    	Jobs.CustomerName, 
    	Jobs.JobType, 
    	Jobs.CSEmp, 
    	Jobs.Status, 
    	Jobs.DateEntered, 
    	Jobs.LastModifiedDateTime, 
    	Jobs.Complaint, 
    	Jobs.Control, 
    	Jobs.NewControl, 
    	ISNULL(xtblProjects.ProjectName, '') AS ProjectName, 
    	Jobs.relProjectControl, 
    	dbo.fn_GetJobShopTask(Jobs.Control, '') AS CST, 
    	Jobs.RelatedCasesID,
    	-- 07/11/24 - Four new columns
    	Jobs.Details as CaseNotes,
    	dbo.fn_GetP21OrderTotal(Jobs.SONumber) AS SOTotal,
    	-- 07/29/24 This is what I am replacing
    	--CASE WHEN [dbo].[fn_GetP21YesNoSABillableItems](Jobs.SONumber) = 0 THEN 'No' ELSE 'Yes' END AS SABillableItemsYN
    	--COALESCE([dbo].[fn_GetP21TotalSABillableItems](Jobs.SONumber), 0) AS SABillableItemsTotal
    	CASE WHEN P21.SONumberCount  = 0 THEN 'No' ELSE 'Yes' END AS SABillableItemsYN,
    	P21.ExtPriceSum AS SABillableItemsTotal
    FROM  Jobs 
    LEFT OUTER JOIN xtblProjects ON xtblProjects.ProjectControl = Jobs.relProjectControl
    CROSS APPLY fn_GetP21Fields(Jobs.SONumber) P21
    WHERE        (Jobs.CustNo = @CustNo) 
    AND  ((@bIncludeCP is null AND Jobs.Status <> 'CP') OR (@bIncludeCP = 1))
    order by Jobs.Control desc
    END
    GO
    
    
    ALTER FUNCTION [dbo].[fn_GetP21Fields](@SONO varchar(8))
    RETURNS TABLE
    AS 
    RETURN (  
      SELECT Count(SONO) as SONumberCount, SUM(EXTPRICE) as ExtPriceSum
      FROM xqryP21LinesRelated s
      WHERE s.SONO = @SONO AND class_id4 = 'SA'
     )
    There are 10 kinds of people in this world. Those who understand binary, and those who don't.

  2. #2

    Thread Starter
    PowerPoster MMock's Avatar
    Join Date
    Apr 2007
    Location
    Driving a 2018 Mustang GT down Route 8
    Posts
    4,513

    Re: Thought I improved performance, but I guess not?

    I executed a recompile against it. It is possibly faster. So maybe hold on answering this so you're not wasting your time. Thanks.
    There are 10 kinds of people in this world. Those who understand binary, and those who don't.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width