Другие отметили, что ваш оператор UPDATE
обновляет каждую строку в таблице. Это, по сути, занимает много времени. И из-за транзакции / отката в базе данных это займет много оперативной памяти и дискового пространства.
Вы не сказали нам, как вы определили свой индекс или индексы на expiration_date
, поэтому этот ответ немного догадывается. В частности, если expiration_date
не находится в своем собственном индексе или не является первым столбцом в составном индексе, этот ответ не будет работать очень хорошо.
Попробуйте использовать такой запрос UPDATE, чтобы обновить 1000 строк в время.
UPDATE coupons
SET expiration_date='2020-06-06'
WHERE expiration_date <> '2020-06-06'
LIMIT 1000
Повторяйте запрос, пока он не обновит больше строк. Завершение обновления все равно займет некоторое время, но оно не будет монополизировать таблицу и не будет генерировать обширные транзакции.
Внимание, не пытайтесь запускать более одного из этих запросов одновременно.