Einzelnen Beitrag anzeigen

Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#1

Sortierstrategie über mehrere Tabellen

  Alt 7. Apr 2011, 10:21
Datenbank: Interbase • Version: ab 6.5 • Zugriff über: BDE
Hallo Wissende,

ich suche eine performante Lösung für nachfolgendes Problem.

In der Tabelle "Baum" (Namen von der Redaktion geändert ) stellen die Datensätze (>100.000) einen Baum dar, die Reihenfolge der Knoten einer Ebene ist in einem Feld Reihenfolge festgelegt. Die Daten selber stehen in x anderen Tabellen. Über Keys werden die jeweiligen Referenzen hergestellt. Es kommt vor, dass in einer Baumebene mehrere Daten von unterschiedlichen Tabellen zusammen kommen.

Bisher wurde in der Applikation immer nur eine Baumebene sortiert, das war alles kein Problem. Jetzt gibt es eine neue Anforderung, es sollen alle Kindknoten von einem Startknoten aus neu sortiert werden. Dabei kann es vorkommen, dass die Knoten unterschiedliche Sortierdefinitionen haben.

1. Versuch: Gehe alle Ebenen durch, sortiere die anstehenden Daten mittels den versch. Sortierdefinitionen und schreibe die Rangfolge in ein Feld von Tabelle Baum. Leider dauert das unter Umständen zu lange. Das sortieren selber nicht, aber die Daten zusammenzutragen.

2. Versuch: Erstelle für jede der Tabellen ein Feld (tabXsortfeld), in dem die zusammengesetzten Daten nach Sortierdefinition geschrieben werden. Die Geschwindigkeit ist bei einem Update einer Tabelle mit ca. 10k zu vernachlässigen (<1s). Da aber in einer Baumebene unterschiedliche Tabellen datem zusammengefügt sind, wollte ich nun von jeder der anderen betroffenen Tabellen die Datensätze vom tabXsortfeld in ein korrespondierenden Feld von Tabelle Baum schreiben. Nur ist das leider enorm langsam.
Code:
update baum set baumsortfld=(select tabXsortfeld from tab x where tabx_pkey=baum_recordkey)
Was könnte man noch machen?

Wie kann man schnell eine selektierte Datenmenge von einer Tabelle in ein Feld einer anderen Tabelle schreiben?


Danke schon mal...
  Mit Zitat antworten Zitat