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
UTABLE
menor ou especificandocondition
adicional 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
TABLE1
duas 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