I’m in a situation where an entire column in a table (used for user tokens) needs to be wiped, i.e., all user tokens are reset simultaneously. There are two ways of going about it: reset each user’s token individually with a separate UPDATE query; or make one big query that affects all rows.
The advantage of one big query is that it will obviously be much faster, but I’m worried about the implications of a large UPDATE query when the database is big. Will requests that occur during the query be affected?
Afraid it’s not that simple. Even if you enable dirty reads, running one big update has a lot of drawbacks:
So if simultaneous requirement can be interpreted “in one batch that may take a while to run”, I would opt for batching it. A good research write up on performance of DELETEs in MySql is here: http://mysql.rjweb.org/doc.php/deletebig, and I think most of the findings are applicable to UPDATE.
The trick will be finding the optimal “batch size”.
Added benefits of batching is that you can make this process resilient to failures and restart-friendly.