MySQL
Você obterá o melhor desempenho se esquecer a cláusula where e colocar todas as condições na expressão ON.
Eu acho que isso ocorre porque a consulta primeiro tem que se juntar às tabelas e depois executa a cláusula where, portanto, se você pode reduzir o que é necessário para se juntar, essa é a maneira mais rápida de obter os resultados / fazer a atualização.
Exemplo
Cenário
Você tem uma tabela de usuários. Eles podem fazer login usando seu nome de usuário ou email ou número de conta. Essas contas podem estar ativas (1) ou inativas (0). Esta tabela possui 50000 linhas
Você tem uma tabela de usuários para desativar de uma só vez, porque descobre que todos fizeram algo ruim. Esta tabela, no entanto, possui uma coluna com nomes de usuário, e-mails e números de contas misturados. Ele também possui um indicador "has_run" que precisa ser definido como 1 (verdadeiro) quando executado
Inquerir
UPDATE users User
INNER JOIN
blacklist_users BlacklistUser
ON
(
User.username = BlacklistUser.account_ref
OR
User.email = BlacklistedUser.account_ref
OR
User.phone_number = BlacklistUser.account_ref
AND
User.is_active = 1
AND
BlacklistUser.has_run = 0
)
SET
User.is_active = 0,
BlacklistUser.has_run = 1;
Raciocínio
Se tivéssemos que ingressar apenas nas condições OR, essencialmente seria necessário verificar cada linha quatro vezes para ver se deveria ingressar e, potencialmente, retornar muito mais linhas. No entanto, ao oferecer mais condições, ele pode "pular" muitas linhas se elas não atenderem a todas as condições ao ingressar.
Bônus
É mais legível. Todas as condições estão em um só lugar e as linhas a serem atualizadas estão em um só lugar