Как быстрее обновить таблицу, содержащую миллионы записей?
Я должен обновить таблицу, в которой есть миллион записей.
Я использовал следующий запрос.
1.я поместил pkeys для обновления во временную таблицу
select * into tempPkey from Prd WHERE status<>'d' and pKey NOT IN (SELECT PrdPKey FROM PrdGroupRel where status <>'d')
2. Затем я использую приведенную ниже команду обновления для обновления.
SET NOCOUNT ON DECLARE @PKey AS Varchar(16) ; DECLARE UPDATE_CURSOR CURSOR FOR SELECT pkey FROM tempPkey FOR UPDATE OPEN UPDATE_CURSOR FETCH NEXT FROM UPDATE_CURSOR INTO @PKey WHILE (@@FETCH_STATUS = 0) BEGIN BEGIN Transaction Update Cndcpmain set status ='d' ,Hostsource='INC7892752_30Oct2018' where mergedkey like '%'+@PKey+'%' and CndcpMetapkey='00100000007gu6ib' and salesorg='MS01' and status<>'d' Print 'Pkey Update completed :' + @Pkey+' ' + convert(varchar(50),Getdate() ) COMMIT Transaction FETCH NEXT FROM UPDATE_CURSOR INTO @PKey END CLOSE UPDATE_CURSOR DEALLOCATE UPDATE_CURSOR SET NOCOUNT OFF
Я отключил триггеры и индексы в таблице Cndcpmain. но только 14-15 pkeys обновляются за 1 минуту. Есть в общей сложности 18916 pkeys для обновления, и ожидаемое время составляет 20 часов. Можем ли мы ускорить это?
Кроме того ,я не могу написать запрос select для записей, которые уже были обновлены, так что я могу исключить обновленные записи в следующем запуске. не могли бы вы мне помочь
Что я уже пробовал:
[См. код выше]