0

Doppelte Einträge löschen Beschleunigen

Guten Morgen

Habe ein Dashboard mit einem Button mit folgenden Befehl. (löscht alle doppelten Zeilen in Tabelle "Leere") Es dauert 6 Min bis er 1700 Datensätze durchgecheckt hat. Gibt es eine Möglichkeit dies zu Beschleunigen. Habe mit "do as Server" versucht da löscht er mir die Doppelten sowie die Originalen auch weg. Was kann ich machen um es zu beschleunigen? Habe es auch in der Tabelle Leere versucht mit "do as Server" braucht er 1,47 Minuten löscht mir aber eben die doppelten und die originalen auch weg. Vielen Dank für Eure Bemühungen und Tipps.

 

Button:

for i in select Leere do
    delete (select Leere where Steuernummer = i.Steuernummer and Nr != i.Nr)
end

4 Antworten

null
    • mirko3
    • vor 2 Monaten
    • Gemeldet - anzeigen

    Hallo Claus. Du weißt ja, daß in der langen Geschichte der Programmierung bei Scripten mit Schleifen und delete() noch nie etwas passiert ist, trotzdem bitte ich Dich, vorher ein Backup zu machen, bevor Du folgendes austestest ;-)

    Von allen Datensätzen mit gleichen Steuernummern werden die gelöscht, die eine größere Datensatznummer haben als der zuerst angelegte, welcher erhalten bleibt. Tabelle mit 600 Datensätzen bei mir in 5sec. Mirko

    do as server
        for i in select Leere do
            let result := min((select Leere)[Steuernummer = i.Steuernummer].number(Nr));
            if result != i.number(Nr) then
                delete i
            end
        end
    end
    
    • Claus.1
    • vor 2 Monaten
    • Gemeldet - anzeigen

    Sorry das ich mich erst jetzt melde, war im Urlaub. Habe es sofort probiert und es funktioniert sehr gut die Zeit ist auf 1.10 Min reduziert worden. Sind 1800 Datensätze bei mir. Kann es sein das ich das über eine Button im Dashboard mache und dies nicht verknüpft ist mit der Tabelle "Leer". 

    Vielen Dank Mirko

      • mirko3
      • vor 2 Monaten
      • Gemeldet - anzeigen

      Ich denke, dass die Laufzeit dadurch nicht verändert wird, ob die Tabelle verknüpft ist, oder wo der Button liegt. In jedem Fall muß die Tabelle mehrmals durchlaufen werden, um die Duplikate durch Vergleich zu finden. Die Dauer wird dann sicher durch die Größe der Tabelle beeinflußt. Die Laufzeit verändert sich im Quadrat zur Größe, da es im Grunde zwei Schleifen sind, weil Zeile 3 zwar ein select ist, aber wie eine optimierte Schleife funktioniert. (So stelle ich mir das vor). Vielleicht kannst Du dem Script in Zeile 2 noch etwas hinzufügen, wenn Datensätze durch ein Ausschlußkriterium (Datum, lfd. Nr.) nicht mehr in Frage kommen. Z.B. select Leere where Datum > .... Dann müssen nur noch Teile der Tabelle durchsucht werden.

      Mirko

      • Claus.1
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Danke für die Ausführliche Antwort

Content aside

  • Status Answered
  • vor 2 MonatenZuletzt aktiv
  • 4Antworten
  • 52Ansichten
  • 2 Folge bereits