Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Array in SQL


jasocul - Di 26.07.16 11:16
Titel: Array in SQL
ACHTUNG CROSS-POSTING:
Delphi-Praxis [http://www.delphipraxis.net/189816-array-sql.html]

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 jeden Datensatz der großen Tabelle erforderlich und muss jeden Tag einmal durchgeführt werden (Datenabgleich zwischen mehreren, unabhängigen Systemen).

Damit ich auf die kleinen Tabellen zurückgreifen kann, habe ich 2 Cursor mit Scroll-Option definiert. Diese beiden Cursor sind aber mein Flaschenhals und ich würde hier gerne optimieren. Ohne diese Cursor läuft die SP weniger als 30 Sekunden, mit den Cursor fast 10 Minuten. Alle anderen Operationen in der SP habe ich zum Test rausgenommen.

Ein Versuch, innerhalb der SP eine Tabelle zu deklarieren und diese als Basis zu nehmen, hat keinen Geschwindigkeitsvorteil gebracht. Ich vermute, das die Datenbank intern eine temporäre Tabelle dafür aufbaut und somit genauso arbeitet, als würde ich die echten Tabellen nutzen.

Theoretisch könnte ich mir eine Menge Variablen deklarieren und das ohne Tabellen machen, aber dann müsste ich bei jeder Änderung der Tabellen die SP anpassen.

Hat jemand eine Idee, wie das ganze optimiert werden kann?


Ralf Jansen - Di 26.07.16 13:21

Wenn du die Stored Proc in .Net programmierst hättest du die Option das in Arrays zu verfrachten.

Zitat:
Theoretisch könnte ich mir eine Menge Variablen deklarieren und das ohne Tabellen machen, aber dann müsste ich bei jeder Änderung der Tabellen die SP anpassen.


Wenn .Net keine Option ist kannst du dir aber immer noch in der Sprache deiner Wahl einen Stored Proc Code Generator schreiben der dir bei Tabellenänderung die passende Stored Proc auswirft.


jasocul - Di 26.07.16 14:05

Daran hatte ich noch gar nicht gedacht. MS-SQL unterstützt ja .Net.
Wenn ich keine andere Lösung finde, ziehe ich das vielleicht noch in Betracht.