Поскольку время увеличивается, по мере того, как вы продвигаетесь, я ожидаю, что вам понадобится индекс для поля id, поскольку он выглядит подозрительно, как будто он выполняет полное сканирование таблицы. Вы можете создать индекс примерно так:
CREATE INDEX my_first_index ON table(id);
(мне нужно добавить это как ответ, потому что я не могу комментировать, я знаю, что это больше комментарий !!)
** РЕДАКТИРОВАТЬ **
Я перечитал и вижу, что ваша проблема больше. Я все еще думаю, что есть шанс, что размещение индекса по идентификатору исправит это, но лучшим решением было бы иметь новую таблицу для сопоставления идентификатора и количества, давайте назовем ее qty_mapping
| id | qty |
+--------+------+
| 1 | 10 |
| 2 | 8 |
...
| 2500 | 20 |
. Индекс ID, а затем вы можете изменить свое обновление на
update stock set qty = (select qm.qty from qty_mapping qm where qm.id = stock.id)
Он должен иметь возможность обновлять целые 80 000 записей в кратчайшие сроки.