Avatar billede BBCDenmark Nybegynder
07. september 2012 - 15:20 Der er 1 kommentar

Optimere Stored Procedure kald?

Jeg har et view i en ms-sql database hvor to af kolonnerne bliver beregnet ved stored procedure kald. Problemet er, at det tager uhyggelig lang tid:

Mit sql-script:

SELECT dbo.HISTORICAL_BALANCE_DAYS(h.ID) AS BALANCE_DAYS, dbo.HISTORICAL_BALANCE_HOURS(h.ID) AS BALANCE_HOURS..........

Og den ene - HISTORICAL_BALANCE_HOURS - af de to stored procedures herunder (de er magen til hinanden, men summerer på to forskellige felter). Den laver en sum over x antal rows og returnerer resultatet.


@txid varbinary(max),
  @return_value_argument float(53)  OUTPUT
AS
  BEGIN
      DECLARE
        @res float(53)

      BEGIN TRY
        SELECT @res = isnull(sum(-HISTORICAL_BALANCE.HOURS), 0)
        FROM dbo.HISTORICAL_BALANCE
        WHERE HISTORICAL_BALANCE.TRANSACTION_ID = @txid
        SET @return_value_argument = @res
        RETURN
      END TRY
      BEGIN CATCH
        BEGIN
            SET @return_value_argument = NULL
            RETURN
        END
      END CATCH
  END



Problemet er, at den skal kalde de to stored procedures for mere end 120.000 rows og det tager LANG tid - så lang tid, at jeg får en time-out i mit C# program.

Kan ovenstående optimeres på en eller anden måde og kan man give mere "power" til disse stored procedure kald? Jeg har forsøgt alt fra regenerering af indexes og hvad jeg ellers har kunnet google.
Avatar billede -mundi- Nybegynder
07. september 2012 - 16:39 #1
Ser ud som om du kan lave det i et kald.
Noget i stil med
SELECT h.ID, sum(isnull(sum(-HISTORICAL_BALANCE.HOURS), 0)) as balance, felt1, felt2
        FROM dbo.HISTORICAL_BALANCE
group by
h.ID, felt1, felt2
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester