Performance Permutationslogik

ThorstenK

Neuer Benutzer
Beiträge
3
Hallo zusammen,

Vieleicht könnt Ihr mir helfen. :)

In Tabelle 1 (t1) habe ich Bewegungssätze mit insgesamt 7 Spalten. In Tabelle 2 (t2) habe ich zu den Bewegungssätzen Stammdaten mit 8 Spalten.

Für jeden Bewegungssatz in t1 suche ich in t2 das Stammdatum mit den meisten Übereinstimmungen in den Spaltenwerten. Die Suche wird dabei von links nach rechts durchgeführt.
D.h. ich prüfe zunächst t1.Spalte1 = t2.Spalten1. In t2 werden alle Zeilen gelöscht in welchen die Bedingung t1.Spalte1 = t1.Spalte 2 nicht erfüllt ist.
Im nächsten Schritt prüfe ich t1.Spalte2 gegen t2.Spalte2 und lösche in t2 wieder alle Datensätze in welchen die Bedingung nicht erfüllt.
Das ganze mache ich solange bis nur noch ein Eintrag in t2 übrig bleibt.

Gelöste habe ich diese Aufgabe indem ich über eine While Schleife die Datensätze in Tabelle 1 einzeln durchgehe. In jeder Schleife schreibe ich die Stammdatenmenge aus t2 in eine Temporäre Tabelle und reduziere die Anzahl an Datensätze in der Temporären entsprechend der oben beschriebenen Logik bis nur noch ein Stammdatensatz übrig bleibt.

T1 hat 5000 Sätze, T2 hat 15000 Sätze.
Die Laufzeit meines Skriptes beträgt insgesamt 20 min.

Wie könnte ich meine Skriptlogik optimieren?

Danke und BG
Thorsten
 
Werbung:
Hi. :)

Ein Join hört sich gut an.
Momentan ist meine Logik in der Schleife wie folgt:

1.Suche
@Anzahl= Zähle die Einträge wo t1.Spalte1 = t2.Spalte1
If Anzahl =>1, lösche alle Einträge in t2 wo t1.Spalte1 != t2.Spalte1

2. Suche
@Anzahl = Zähle die Einträge wo t1.Spalte2 = t2.Spalte2
If Anzahl =>1, lösche alle Einträge in t2 wo t1.Spalte2 != t2.Spalte2

3.Suche
@Anzahl = Zähle die Einträge wo t1.Spalte3 = t2.Spalte3
If Anzahl =>1, lösche alle Einträge in t2 wo t1.Spalte3 != t2.Spalte3

4./5./6. Suche

Am Ende folgt das Update von t1, da in t2 nur noch ein Eintrag steht


Wie kann man daraus einen Join machen?
Danke und BG
Thorsten
 
einfach alle joins kombinieren:
........ t1.Spalte1 = t2.Spalte1
and t1.Spalte2 = t2.Spalte2
and t1.Spalte3 = t2.Spalte3
usw.
Es bleibt übrig, was passt.

gelöscht ist dann natürlich noch nichts. Aber mit dem Ergebnis kann man eine Löschoperation durchführen, wo alles gelöscht wird, was ungleich dem Ergebnis des Joins ist. (Wenn die Löschung überhaupt nötig ist, da sie vielleicht nur als Krücke zur Ergebnisfindung verwendet wird)
 
Hi dabadepdu, ein Join über alle Felder hat mir sehr geholfen. Dank Dir. Falls Du mehr Details über die finale Lösung haben willst, lass es mich bitte wissen.
 
Werbung:
Zurück
Oben