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
UTABLE
più piccolo o specificando unacondition
aggiuntiva che restringe la parte da fondere. - Assicurati che la parte da unire rientri nella memoria, altrimenti la query viene eseguita molto più lentamente. Realizzare
TABLE1
due 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