Synchronize till att välja (mycket) data från måltabellen

Vi ser i de aktiva frågorna i SQL Server att synchronize to utför en select * from gigabytesofdata som tar väldigt lång tid, medan en motsvarande (native) merge-sats blir klar på några sekunder.

Vi har en staging-tabell (lite data) och en mål-tabell (en tabell på 55 GB på disk).

Satsen:

synchronize gigabytesofdata
from        stagingtable
with        update or insert
identified 
by          kolommen, uit, de, primary, key

I de aktiva frågorna ser vi, medan den här satsen körs:

select * from gigabytesofdata

Det hade vi inte förväntat oss (och det tar naturligtvis också väldigt lång tid).

Förväntningen är att synkroniseringen endast tittar på datan i staging-tabellen, där poster infogas (insert) i gigabytesofdata om poster med dessa nyckelkolumner inte redan finns där, och annars uppdateras (update).

Gör vi något fel (om så är fallet, förklara gärna), eller är det här ett scenario som synchronize-satsen inte hanterar korrekt? Enligt beskrivningen verkar nämligen synchronize-satsen vara precis vad vi behöver!

Het beschreven gedrag is zoals de code momenteel uitgevoerd wordt. Echter, zoals terecht gezegd is het mogelijk om de uitvoering te optimaliseren. In een ander topic is hier al verder op ingegaan:

Als idee voor verbetering. De basis is dat als alleen insert en update gebruikt worden, en het doelplatform ondersteunt server-side filtering, het mogelijk is om de brondataset te analyseren op eigenschappen zoals een beperkt waardenbereik van een datumveld of getal, en alleen een doorsnede op te halen van de doeltabel die voldoet aan deze eigenschappen qua waardenbereik. Dit kan makkelijk duizenden keren sneller zijn als het gaat om bijladen, terwijl het volledig ophalen van de doeltabel dan veel onnodige I/O’s veroorzaakt.

Advies is om in te haken op het idee uit bovenstaande link door daar een reactie achter te laten.

Deze vraag is automatisch gesloten na 2 weken inactiviteit. Het laatste gegeven antwoord is gemarkeerd als oplossing.

Gelieve een nieuwe vraag te stellen via een apart topic als het probleem opnieuw optreedt. Gelieve in de nieuwe vraag een link naar dit topic op te nemen door de URL er van in de tekst te plakken.