Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
CODE PROJECT For Those Who Code
  • Home
  • Articles
  • FAQ
Community
  1. Home
  2. Database & SysAdmin
  3. Database
  4. StoredProcedures - which is fastest and why

StoredProcedures - which is fastest and why

Scheduled Pinned Locked Moved Database
sharepointagentic-aiquestion
7 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    alwinSCH
    wrote on last edited by
    #1

    CREATE PROCEDURE sp_Get_Borderel_4d_data @MaatschappijID numeric, @VervalDatum datetime, @LanguageID char(1) AS DECLARE @MaatschappijIDLoc numeric DECLARE @VervalDatumLoc datetime DECLARE @LanguageIDLoc char(1) SET @MaatschappijIDLoc = @MaatschappijID SET @VervalDatumLoc = @VervalDatum SET @LanguageIDLoc = @LanguageID SELECT Agent.AgentID, Agent.Naam AS AgentNaam, ProRataDetail.InternPolisNummer, (sum(ProRataNettoPremie) - sum(ProRataCommissie)) AS Techpremie, sum(ProRataNettoPremie) As ProRataNettoPremie, sum(ProRataTaksen) As ProRataTaksen, sum(ProRataBrutoPremie) As ProRataBrutoPremie, sum(ProRataCommissie) As ProRataCommissie, sum(ProRataBeheerskosten) As ProRataBeheerskosten FROM fn_Get_ProRataDetail(0, '{00000000-0000-0000-0000-000000000000}', 0, 0, @MaatschappijIDLoc, @VervalDatumLoc, @LanguageIDLoc) as ProRataDetail LEFT JOIN Polis ON Polis.PolisID = ProRataDetail.PolisID LEFT JOIN Klant ON Klant.KlantID = Polis.KlantID LEFT JOIN Agent ON Agent.AgentID = Polis.AgentID WHERE Polis.Demo <> 1 GROUP BY Agent.AgentID, Agent.Naam, ProRataDetail.InternPolisNummer ORDER BY Agent.Naam, ProRataDetail.InternPolisNummer GO ---------------------------------------------------------- CREATE PROCEDURE sp_Get_Borderel_4d_data @MaatschappijID numeric, @VervalDatum datetime, @LanguageID char(1) AS SELECT Agent.AgentID, Agent.Naam AS AgentNaam, ProRataDetail.InternPolisNummer, (sum(ProRataNettoPremie) - sum(ProRataCommissie)) AS Techpremie, sum(ProRataNettoPremie) As ProRataNettoPremie, sum(ProRataTaksen) As ProRataTaksen, sum(ProRataBrutoPremie) As ProRataBrutoPremie, sum(ProRataCommissie) As ProRataCommissie, sum(ProRataBeheerskosten) As ProRataBeheerskosten FROM fn_Get_ProRataDetail(0, '{00000000-0000-0000-0000-000000000000}', 0, 0, @MaatschappijID, @VervalDatum, @LanguageID) as ProRataDetail LEFT JOIN Polis ON Polis.PolisID = ProRataDetail.PolisID LEFT JOIN Klant ON Klant.KlantID = Polis.KlantID LEFT JOIN Agent ON Agent.AgentID = Polis.AgentID WHERE Polis.Demo <> 1 GROUP BY Agent.AgentID, Agent.Naam, ProRataDetail.InternPolisNummer ORDER BY Agent.Naam, ProRataDetail.InternPolisNummer GO -------------------------------------------------------------------------- Why is the first procedure, faster than the second? The ony difference are the extra local variables! thanks, A.

    M W 2 Replies Last reply
    0
    • A alwinSCH

      CREATE PROCEDURE sp_Get_Borderel_4d_data @MaatschappijID numeric, @VervalDatum datetime, @LanguageID char(1) AS DECLARE @MaatschappijIDLoc numeric DECLARE @VervalDatumLoc datetime DECLARE @LanguageIDLoc char(1) SET @MaatschappijIDLoc = @MaatschappijID SET @VervalDatumLoc = @VervalDatum SET @LanguageIDLoc = @LanguageID SELECT Agent.AgentID, Agent.Naam AS AgentNaam, ProRataDetail.InternPolisNummer, (sum(ProRataNettoPremie) - sum(ProRataCommissie)) AS Techpremie, sum(ProRataNettoPremie) As ProRataNettoPremie, sum(ProRataTaksen) As ProRataTaksen, sum(ProRataBrutoPremie) As ProRataBrutoPremie, sum(ProRataCommissie) As ProRataCommissie, sum(ProRataBeheerskosten) As ProRataBeheerskosten FROM fn_Get_ProRataDetail(0, '{00000000-0000-0000-0000-000000000000}', 0, 0, @MaatschappijIDLoc, @VervalDatumLoc, @LanguageIDLoc) as ProRataDetail LEFT JOIN Polis ON Polis.PolisID = ProRataDetail.PolisID LEFT JOIN Klant ON Klant.KlantID = Polis.KlantID LEFT JOIN Agent ON Agent.AgentID = Polis.AgentID WHERE Polis.Demo <> 1 GROUP BY Agent.AgentID, Agent.Naam, ProRataDetail.InternPolisNummer ORDER BY Agent.Naam, ProRataDetail.InternPolisNummer GO ---------------------------------------------------------- CREATE PROCEDURE sp_Get_Borderel_4d_data @MaatschappijID numeric, @VervalDatum datetime, @LanguageID char(1) AS SELECT Agent.AgentID, Agent.Naam AS AgentNaam, ProRataDetail.InternPolisNummer, (sum(ProRataNettoPremie) - sum(ProRataCommissie)) AS Techpremie, sum(ProRataNettoPremie) As ProRataNettoPremie, sum(ProRataTaksen) As ProRataTaksen, sum(ProRataBrutoPremie) As ProRataBrutoPremie, sum(ProRataCommissie) As ProRataCommissie, sum(ProRataBeheerskosten) As ProRataBeheerskosten FROM fn_Get_ProRataDetail(0, '{00000000-0000-0000-0000-000000000000}', 0, 0, @MaatschappijID, @VervalDatum, @LanguageID) as ProRataDetail LEFT JOIN Polis ON Polis.PolisID = ProRataDetail.PolisID LEFT JOIN Klant ON Klant.KlantID = Polis.KlantID LEFT JOIN Agent ON Agent.AgentID = Polis.AgentID WHERE Polis.Demo <> 1 GROUP BY Agent.AgentID, Agent.Naam, ProRataDetail.InternPolisNummer ORDER BY Agent.Naam, ProRataDetail.InternPolisNummer GO -------------------------------------------------------------------------- Why is the first procedure, faster than the second? The ony difference are the extra local variables! thanks, A.

      M Offline
      M Offline
      Mycroft Holmes
      wrote on last edited by
      #2

      The question is why are you using 3 extra variables, that takes 3 extra cycles and therefore it is slower ;P

      Never underestimate the power of human stupidity RAH

      A 1 Reply Last reply
      0
      • M Mycroft Holmes

        The question is why are you using 3 extra variables, that takes 3 extra cycles and therefore it is slower ;P

        Never underestimate the power of human stupidity RAH

        A Offline
        A Offline
        alwinSCH
        wrote on last edited by
        #3

        I can run it a 1000 times! the difference is: the first one with local variables: I get a result in 5 seconds. the second one without local variables: I get a result in 20 minutes!!!! Thank you

        1 Reply Last reply
        0
        • A alwinSCH

          CREATE PROCEDURE sp_Get_Borderel_4d_data @MaatschappijID numeric, @VervalDatum datetime, @LanguageID char(1) AS DECLARE @MaatschappijIDLoc numeric DECLARE @VervalDatumLoc datetime DECLARE @LanguageIDLoc char(1) SET @MaatschappijIDLoc = @MaatschappijID SET @VervalDatumLoc = @VervalDatum SET @LanguageIDLoc = @LanguageID SELECT Agent.AgentID, Agent.Naam AS AgentNaam, ProRataDetail.InternPolisNummer, (sum(ProRataNettoPremie) - sum(ProRataCommissie)) AS Techpremie, sum(ProRataNettoPremie) As ProRataNettoPremie, sum(ProRataTaksen) As ProRataTaksen, sum(ProRataBrutoPremie) As ProRataBrutoPremie, sum(ProRataCommissie) As ProRataCommissie, sum(ProRataBeheerskosten) As ProRataBeheerskosten FROM fn_Get_ProRataDetail(0, '{00000000-0000-0000-0000-000000000000}', 0, 0, @MaatschappijIDLoc, @VervalDatumLoc, @LanguageIDLoc) as ProRataDetail LEFT JOIN Polis ON Polis.PolisID = ProRataDetail.PolisID LEFT JOIN Klant ON Klant.KlantID = Polis.KlantID LEFT JOIN Agent ON Agent.AgentID = Polis.AgentID WHERE Polis.Demo <> 1 GROUP BY Agent.AgentID, Agent.Naam, ProRataDetail.InternPolisNummer ORDER BY Agent.Naam, ProRataDetail.InternPolisNummer GO ---------------------------------------------------------- CREATE PROCEDURE sp_Get_Borderel_4d_data @MaatschappijID numeric, @VervalDatum datetime, @LanguageID char(1) AS SELECT Agent.AgentID, Agent.Naam AS AgentNaam, ProRataDetail.InternPolisNummer, (sum(ProRataNettoPremie) - sum(ProRataCommissie)) AS Techpremie, sum(ProRataNettoPremie) As ProRataNettoPremie, sum(ProRataTaksen) As ProRataTaksen, sum(ProRataBrutoPremie) As ProRataBrutoPremie, sum(ProRataCommissie) As ProRataCommissie, sum(ProRataBeheerskosten) As ProRataBeheerskosten FROM fn_Get_ProRataDetail(0, '{00000000-0000-0000-0000-000000000000}', 0, 0, @MaatschappijID, @VervalDatum, @LanguageID) as ProRataDetail LEFT JOIN Polis ON Polis.PolisID = ProRataDetail.PolisID LEFT JOIN Klant ON Klant.KlantID = Polis.KlantID LEFT JOIN Agent ON Agent.AgentID = Polis.AgentID WHERE Polis.Demo <> 1 GROUP BY Agent.AgentID, Agent.Naam, ProRataDetail.InternPolisNummer ORDER BY Agent.Naam, ProRataDetail.InternPolisNummer GO -------------------------------------------------------------------------- Why is the first procedure, faster than the second? The ony difference are the extra local variables! thanks, A.

          W Offline
          W Offline
          WoutL
          wrote on last edited by
          #4

          This looks like a problem caused by Parameter sniffing. Just google on it and you'll see what I mean.

          Wout Louwers

          A M 2 Replies Last reply
          0
          • W WoutL

            This looks like a problem caused by Parameter sniffing. Just google on it and you'll see what I mean.

            Wout Louwers

            A Offline
            A Offline
            alwinSCH
            wrote on last edited by
            #5

            thank you all, it has something to do with Parameter Sniffing! It explains a lot! Is this the best practice? to disable parameter sniffing? Thank you

            W 1 Reply Last reply
            0
            • A alwinSCH

              thank you all, it has something to do with Parameter Sniffing! It explains a lot! Is this the best practice? to disable parameter sniffing? Thank you

              W Offline
              W Offline
              WoutL
              wrote on last edited by
              #6

              Well, You are using the parameters in the call to fn_Get_ProRataDetail. You could try what happens ig you do the local var trick in that function. That way other sp's may benefit too. But the local var trick is the only one I know besides using With Recompile.

              Wout Louwers

              1 Reply Last reply
              0
              • W WoutL

                This looks like a problem caused by Parameter sniffing. Just google on it and you'll see what I mean.

                Wout Louwers

                M Offline
                M Offline
                Mycroft Holmes
                wrote on last edited by
                #7

                See thats the reason I spend time here, never heard of parameter sniffing, sounds disgusting. There are some excellent articles out there, another tool in the ongoing fight for performance. Thanks Wout.

                Never underestimate the power of human stupidity RAH

                1 Reply Last reply
                0
                Reply
                • Reply as topic
                Log in to reply
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes


                • Login

                • Don't have an account? Register

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • World
                • Users
                • Groups