-
Forum: Datenbanken
by Jasocul,
28. Jul 2016
Sooo, eine Nacht drüber geschlafen und Thema erledigt.
Man kann sicher noch ein paar Sekunden rauskitzeln, aber bei den Datenmengen und den notwendigen Vergleichen, gibt es einfach Grenzen.
Also habe ich einen neuen Ansatz gemacht, und die zu prüfende Datenmenge reduziert. Statt der halben Mio Datensätze, sind es dadurch zur Zeit nur noch wenige hundert. Selbst wenn es ein paar tausend...
-
Forum: Datenbanken
by Jasocul,
27. Jul 2016
Jedes DBMS hat Vor- und Nachteile. Ich komme halt ursprünglich aus der Oracle-Ecke.
Die Zieltabelle hat zwar einen Index, aber das ist kein Problem. Ohne Index würde ich vermutlich Stunden warten. Die Zieltabelle hat etwa 1,3 Mio Datensätze und ist definitiv nicht der Flaschenhals. Das weiß ich deswegen, weil ich alle Aktionen auf dieser Tabelle für die Tests deaktiviert habe.
Auf die...
-
Forum: Datenbanken
by Jasocul,
27. Jul 2016
Hi Michael,
Ich leide schon genug. :roll: :wink:
-
Forum: Datenbanken
by Jasocul,
27. Jul 2016
declare crsParam1 cursor scroll READ_ONLY for
select Begriff, Ersatz from @ParamTable1
scroll ist leider zwingend.
Ich habe auch mit local und static getestet. Die haben aber keinen spürbaren Effekt.
-
Forum: Datenbanken
by Jasocul,
27. Jul 2016
Nach eingehender Untersuchung meiner String-Operationen, konnte ich noch doch noch einiges rauskitzeln.
Von der ursprünglichen Laufzeit von ca. 10 Minuten, bin ich jetzt runter auf unter 6,5 Minuten und ich habe noch einige Stellen gesehen, die potential haben.
Der Trick:
Es geht ja um Wort- und Buchstaben-Ersetzung mit verschiedenen Nebenbedingungen. Die Bedingungen lasse ich aber jetzt mal...
-
Forum: Datenbanken
by Jasocul,
27. Jul 2016
@jobo:
Im Prinzip mache ich es bereits genau so. Das hat aber keinen erkennbaren Unterschied gemacht.
@hanvas:
Wirkt ein wenig, wie mit Kanonen auf Spatzen, wobei es prinzipiell besser sein würde, näher an der Quelle der Daten zu arbeiten.
Ich hatte gestern beim Einschlafen noch eine Idee, die ich heute ausprobieren werde.
Ansatz: Ich bastel mir einen String, der einen definiertes...
-
Forum: Datenbanken
by Jasocul,
26. Jul 2016
Ja, das habe ich natürlich gemacht. :wink:
Aber jeder Hinweis kann helfen. Könnte ja sein, dass ich mich irgendwo verrannt habe.
Die Dauer für die erste Erstellung der Abgleich-Tabellen ist ca. eine halbe Stunde.
Die tägliche Aktualisierung liegt jetzt bei ca. 7 Minuten.
-
Forum: Datenbanken
by Jasocul,
26. Jul 2016
Hatte ich das noch nicht geschrieben? Sorry.
Es gibt dabei keinen zeitlichen Unterschied. Ich habe den Eindruck, dass der Server intern eine temporäre Tabelle dafür anlegt. Ich muss ja auch bei einer Tabellen-Variablen einen Cursor verwenden. Oder gibt es dann andere Möglichkeiten, die ich übersehen habe und die schneller ist?
-
Forum: Datenbanken
by Jasocul,
26. Jul 2016
@Aviator:
Kein Problem. Manchmal sind es die einfachen Dinge, die zur Lösung führen, weil man zu kompliziert denkt.
@MichaelT:
Alle Daten werden sequentiell verarbeitet (alles ohne order by, joins, ...). Die Aktualisierungen natürlich nicht, aber die sind im Test auch nicht aktiviert. Die Statistiken können somit keine Rolle spielen.
Aber der Hinweis auf Static hat mich ein bisschen...
-
Forum: Datenbanken
by Jasocul,
26. Jul 2016
Hallo Aviator,
das wäre nur eine sehr theoretische Möglichkeit, da ich selbst keinen Zugriff auf die anderen DB-Systeme habe.
So muss ich mit dem leben, was ich bekomme.
Delphi ist da komplett außen vor. So ein Event gibt es also nicht. Die Überlegung das über Datenbank-Trigger zu machen, habe ich praktisch sofort verworfen, da die Daten im ersten Schritt über ein Bulk-Insert eingelesen...
-
Forum: Datenbanken
by Jasocul,
26. Jul 2016
Leider nicht.
Ich muss in 2-3 Feldern ein Wort-Splitting machen, dabei verschiedene Neben-Bedingungen beachten, bestimmte Wörter ignorieren/ersetzen. Teilweise betrifft das auch nur einzelne Buchstaben. Joins oder ähnliches sind auf diese Weise nicht zu realisieren, da die Inhalte durch die Operationen ja variabel sind.
Gebraucht wird das für:
Pro Datensatz wird dann je zulässigem Wort in...
-
Forum: Datenbanken
by Jasocul,
26. Jul 2016
Hi roldi,
es werden alle Datensätze aller genutzten Tabellen sequentiell durchlaufen und für den Test habe ich alles deaktiviert, was die Daten verändert. Ein fehlender Index ist ganz sicher nicht das Problem.
Ich habe aber jetzt zur Sicherheit noch einen Test-Durchlauf gemacht.
- Durchlauf der kann 500.000 Datensätze ohne einen Änderungs-Cursor dauert ca. 15 Sekunden
- Mit Aktivierung...
-
Forum: Datenbanken
by Jasocul,
26. Jul 2016
Hinweis auf Cross-Posting:
Enwickler-Ecke
Ja, ich weiß, dass es in SQL keine Arrays gibt.
Mein Problem ist folgendes:
Ich benötige eine Stored-Procedure, die ca. eine halbe Million Datensätze verarbeitet.
Darin enthalten sind verschiedenste String-Operationen, die auf zwei Tabellen (weniger als 50 Datensätze) zurückgreifen, um z.B. Zeichen- und Wort-Ersetzungen durchzuführen. Dies ist für...