In realtà ho trovato consigli generali per tali query:l'idea di utilizzare SQL Merge o Update è molto intelligente ma fallisce quando dobbiamo aggiornare molti record (ad esempio 75M ) in un tavolo grande e ampio (ad esempio 240M ).
Osservando il piano di query della query sottostante possiamo dire che TABLE SCAN della TABELLA1 e MERGE finale impiegano il 90% del 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
Quindi per usare MERGE dobbiamo:
- Ridurre il numero di righe necessarie per aggiornare e passare correttamente queste informazioni a SQL Server. Questo può essere fatto rendendo
UTABLEpiù piccolo o specificando unaconditionaggiuntiva che restringe la parte da fondere. - Assicurati che la parte da unire rientri nella memoria, altrimenti la query viene eseguita molto più lentamente. Realizzare
TABLE1due volte in meno ha ridotto il mio tempo reale di interrogazione da 11 ore a 40 minuti.
Come menzionato da Mark puoi usare UPDATE sintassi e usa WHERE clausola per restringere la parte da fondere - questo darà gli stessi risultati. Inoltre, evita di indicizzare TABLE1 poiché ciò causerà ulteriore lavoro per ricostruire l'indice durante MERGE