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.