Mir hat ein Berater erzählt, dass in SSIS ein Merge mit Sort schneller ist, als ein Lockup. Nach anfänglichen erstaunen baute ich ein Szenario, um diese Behauptung zu überprüfen. Hierfür wurde eine Faktentabelle mit ca. 12 Mio. Zeilen befüllt und zwei Dimensionstabellen mit jeweils 4 Mio. Zeilen. Im ersten Versuch wurde die Faktentabelle mit einer Dimensionstabelle verbunden. Hierfür wurden drei Methoden verwendet: ein Lookup, ein Merge mit vorherigen Sort und ein Merge, bei dem die Sortierung bereits in der Datenquelle geschieht. Der Aufbau mit den drei Methoden zeigt das folgende Bild, wobei als erstes der Lookup abgebildet ist, als zweites der Merge mit vorheriger Sortierung und als letztes der Merge mit Sortierung in der Datenquelle.
Der Versuch wurde dreimal durchgeführt und die Durchschnittswerte dieser Versuche werden in der folgenden Tabelle dargestellt:
Lookup |
Merge mit Sort |
Merge mit Sort in der Datenquelle |
142,86 sec |
141,17 sec |
87,11 sec |
Zu meinem Erstaunen war der Merge mit Sort sogar ein Tick schneller als ein Lookup und der Merge mit Sortierung in der Datenquelle am Schnellsten. Der Grund, dass die Sortierung in Datenquelle am schnellsten war, hängt damit zusammen, dass diese durch die Datenbankengine durchgeführt wird und dort besonders performant geschieht. Unterschiede Beim Lookup und dem Merge mit Sortierung zeigte sich vor allem auch darin, dass mehr als doppelt so viel RAM beim Merge benötigt wurde. Somit ist der Lookup zwar gleich schnell, allerdings deutlich Ressourcenschonender.
Bei einem weiteren Versuch wurde auch noch die weitere Dimensionstabelle mit der Faktentabelle verbunden.
Lookup |
Merge mit Sort |
Merge mit Sort in der Datenquelle |
164,04 sec |
288,58 sec |
103,31 sec |
Hierbei zeigte sich ein ähnliches Bild wie im vorherigen Versuch, jedoch war der Merge mit Sort in diesem Fall die mit Abstand langsamste Variante. Auch zeigte sich, dass der Ramverbrauch bei dieser Methode am langsamsten war. In allen Versuchen am schnellsten war der Merge mit Sortierung in der Datenbank.