2012-04-03 14 views
0

Ich habe zehn Master-Tabellen und eine Transaktionstabelle. In meiner Transaktionstabelle (es ist eine Speichertabelle wie ClientDataSet) gibt es zehn Nachschlagefelder, die auf meine zehn Haupttabellen zeigen.Schlüsselfeldwert nur zuweisen, wenn entsprechendes Suchergebnis vorhanden ist

Jetzt versuche ich Schlüsselfeldwerte dynamisch zu all meinen Suchschlüsselfeldwerten (der Transaktionstabelle) von einem anderen Server zuzuordnen (Daten kommen als soap xml). Vor der Zuweisung dieser Werte muss überprüft werden, ob der entsprechende Ergebniswert in den Master-Tabellen gültig ist oder nicht. Ich verwende einen Filter (zB status = 1), um zu prüfen, ob er gültig ist oder nicht.

Momentan ist es so, dass wir vor dem Zuweisen jedes Schlüsselfeldwerts die Master-Tabellen mit diesem Filter filtern und mithilfe der locate-Funktion prüfen, ob sie vorhanden ist oder nicht. und wenn sie lokalisiert sind, werden wir ihren Schlüsselfeldwert zuweisen.

Dies funktioniert gut, wenn nur wenige Datensätze in meinen Master-Tabellen vorhanden sind. Stellen Sie sich vor, dass meine Master-Tabellen jeweils fünfzigtausend Datensätze haben (ja, der Kunde hat so viele Daten), dies wird zu einem großen Leistungsproblem führen.

Könnten Sie mir bitte helfen, mit dieser Situation umzugehen.

Dank Basil

+0

Ich sehe keine andere Option, wenn Sie Suchfelder verwenden, die auf einem DataSet basieren. Sie könnten die Datenbank direkt abfragen, anstatt sie in einem DataSet zu suchen. Der Suchwert könnte das Ergebnis einer JOIN-Abfrage sein. sehr schwer, dieses Q zu beantworten, weil ich nicht weiß, was die Verwendung der Transaktionstabelle (kann Sie hinzufügen/bearbeiten/löschen?). – kobik

+0

Ja Benutzer kann die Transaktionstabelle bearbeiten. Es ist eine TDBISAMTable-Komponente. Genau wie TClientDataSet – iambasiljoy

+0

Ich denke, dass Sie einige Testfälle mit Ihren verschiedenen Methoden ausführen müssen, um zu bestimmen, welche die beste Leistung basierend auf Ihrem Design bietet. Sie könnten versuchen, Abfragen für die Mastertabellen zu verwenden, indem Sie sie mit dem Schlüssel abfragen, und wenn query.recordcount> 0, dann existiert der Schlüssel und vergleichen Sie dies mit Ihrer Filter/locate-Methode. –

Antwort

0

Der einzige Weg, zu wissen, ob es langsam ist, warum, wo und welche Lösung am besten funktioniert, ist zu profilieren.
Machen Sie keine a priori Annahmen.

Das heißt, die Minimierung von Rundreisen zum Server und die Menge der übertragenen Daten ist oft eine gute Sache zu versuchen.
Zum Beispiel, wenn Ihre Master-Tabellen auf dem Server sind (nicht 100% klar von Ihrer Frage), Senden nur 1 Abfrage (oder gespeicherte Proc-Aufruf) übergibt alle Werte zu prüfen, sofort als Parameter und eine Reihe von "IF EXISTS ... "und alle Antworten auf einmal (entweder Ausgangsparameter oder ein Datensatz 1 Datensatz) wäre ein guter Anfang.

Und 50.000 Datensätze ist nicht viel, also, wie ich eingangs sagte, haben Sie möglicherweise nicht einmal ein Leistungsproblem. Überprüfe es zuerst!

+0

Klingt gut. Ich werde es versuchen – iambasiljoy

Verwandte Themen