Почему мой оператор UPDATE занимает много времени, затрагивая только 242 строки? - PullRequest
0 голосов
/ 10 декабря 2018
begin try
    begin tran
        update i
        set i.Uf_Commodity = t.commodity
        from item i inner join #temp1 t on i.item = t.item
    commit tran
end try

begin catch
    if (xact_state() = 1 or xact_state() = -1) and @@trancount > 1
    begin   

        rollback tran
        print('Transaction rolled back.')

    end

end catch

Я заполнил временную таблицу с именем #temp1 пунктами и товарными ценностями.Теперь мне нужно обновить таблицу item всеми этими товарами.По какой-то причине, когда я выполняю это, запрос продолжает выполняться необычно долго (я остановил его через 15 секунд, это не должно занять много времени).Это обновление должно занять всего секунду.Я сделал ошибку при написании заявления?

1 Ответ

0 голосов
/ 10 декабря 2018

Для этого запроса:

update i
    set i.Uf_Commodity = t.commodity
    from item i inner join
         #temp1 t
         on i.item = t.item;

Я бы предложил индекс на #temp1(item, commodity).У вас, вероятно, уже есть индекс на i(item).

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