Я создал курсор в хранимой процедуре, мой результат оператора 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
Как я могу уменьшить время, необходимое для выполнения этого запроса?