Mysql join heavy query on large tables taking hours
It may (or may not) be possible to add some composite indexes to speed up the query.  It may (or may not) be possible to reformulate the query to speed it up -- perhaps by turning subqueries into JOINs.

But it seems like 3M possible updates will lead to a very slow query in any case.  I suggest chunking the UPDATE into no more than 1000 rows at a time.  This will avoid various locks that interfere with other traffic.  And it may actually run faster -- due to not needing to hang onto millions of rows for potential ROLLBACK.

Discussion of chunking:  http://mysql.rjweb.org/doc.php/deletebig#deleting_in_chunks

If you want me to check your indexes, please provide SHOW CREATE TABLE.