Курсор в SQL Server занимает слишком много времени для 35 миллионов записей - PullRequest
1 голос
/ 25 марта 2019

Я создал курсор в хранимой процедуре, мой результат оператора select содержит около 35 миллионов записей.

Я извлекаю каждое значение курсора и выполняю хранимую процедуру, в свою очередь следующая хранимая процедура вызывает другую хранимую процедуру, которая имеет несколько операторов вставки.

Для выполнения запроса требуется более 2 дней, каждый раз, когда строка курсора занимает 0,7 секунды, а количество строк составляет 35 миллионов.

Запрос следующий:

-- Created a cursor to read over data
DECLARE testCursor CURSOR FAST_FORWARD LOCAL FOR
    SELECT 
        StartTime, EndTime, [datares], Id, address,
        c.RCount, c.SCount 
    FROM 
        ConData c

-- Opening the cursor and fetching the first Condata
OPEN testCursor

FETCH NEXT FROM testCursor INTO
    @startTime, @endTime, @datares, @Id, @address, @rCount, @sCount

WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC InsertOrUpdateConData @startTime, @endTime, @datares, @Id, @address, @rCount, @sCount

    UPDATE DataRec
    SET EndTime = @endTime
    WHERE Id = @pId AND Type = 'ConData' AND Int1 = @Id

    -- Fetch the next conversation
    FETCH NEXT FROM testCursor INTO
        @startTime, @endTime, @datares, @Id, @address, @rCount, @sCount
END

CLOSE testCursor 
DEALLOCATE testCursor 

Как я могу уменьшить время, необходимое для выполнения этого запроса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...