SQL Server中游标性能的提高

时间:2018-08-02 12:39:52

标签: sql sql-server

我定义了以下游标:

DECLARE cursor1 FOR 
    SELECT BR1, REFNO1, STRTDTE, ENDDTE, PENAMT, ACCT, PRINAMT 
    FROM TBL1

--Temp variables are defined 
DECLARE @lBr1 CHAR(3), @lREFNO1 CHAR(20), @lSTRTDTE DATETIME;
DECLARE @lENDDTE DATETIME, @lACCT CHAR(35), @lPENAMT  FLOAT;
DECLARE @lPRINAMT FLOAT, @nSchdInt FLOAT

OPEN cursor1

FETCH cursor1 INTO @lBr1, @lDealNo1, @lSTRTDTE, @lENDDTE, @lACCT, @lPENAMT, @lPRINAMT

WHILE @@fetch_status = 0
BEGIN
    SELECT 
        @nSchdIntAmt = AMT 
    FROM 
        TBL2 
    WHERE
        REFNO1 = @lREFNO1
        AND STRTDTE = @lSTRTDTE 
        AND ENDDTE = @lENDDTE

    --IF THERE IS NO RECORD
    IF @@rowcount = 0 
    BEGIN
        INSERT INTO TBL2
            SELECT * FROM TBL1 
    END

    --If record present update following columns
    ELSE
    BEGIN  
        UPDATE TBL2 
        SET PRINAMT = @nSchdIntAmt,
            PENAMT = @lPENAMT 
        WHERE
            DEALNO = @lREFNO1  
            AND BR1 = @lBr1
    END 

 ---Fetch next rows

此光标正在处理5万行,耗时25 -30分钟。我试图在从TBL1进行列选择时提供索引,以提高性能,但没有运气。还有其他实现方式吗?

0 个答案:

没有答案
相关问题