Na verdade, descobri recomendações gerais para essas consultas:A ideia de usar o SQL Merge ou Update é muito inteligente, mas falha quando precisamos atualizar muitos registros (ou seja, 75M ) em uma tabela grande e ampla (ou seja, 240 milhões ).
Observando o plano de consulta da consulta abaixo, podemos dizer que
TABLE SCAN da TABELA1 e MERGE final estão tomando 90% do tempo. MERGE TABLE1 as Target
USING UTABLE as source
ON Target.record_id = source.record_id
WHEN MATCHED AND (condition) THEN
UPDATE SET Target.columns=source.columns
Então, para usar MERGE, precisamos:
- Reduza o número de linhas que precisamos atualizar e passe essas informações corretamente para o SQL Server. Isso pode ser feito fazendo
UTABLEmenor ou especificandoconditionadicional que restringe a parte a ser mesclada. - Certifique-se de que a parte a ser mesclada cabe na memória, caso contrário, a consulta será executada muito mais lentamente. Fazendo
TABLE1duas vezes menos reduziu meu tempo real de consulta de 11 horas para 40 minutos.
Como Mark mencionou, você pode usar
UPDATE sintaxe e use WHERE cláusula para restringir a parte a ser mesclada - isso dará os mesmos resultados. Evite também indexar TABLE1 pois isso causará trabalho adicional para reconstruir o índice durante MERGE