dschroeder
07-03-13, 09:05
Guten Morgen,
wir müssen vor dem Schreiben von Datensätzen eine laufende Nr. für den neuen Datensatz vergeben. Es geht nicht um eine eindeutige laufende Nr. in der Datei, sondern um eine laufende Nr. pro "Auftrag". Das haben wir mit folgendem SQL umgesetzt:
select max(sp_sparaid) into :newNr
from idmspara where sp_se_rec = 107275170;
Die Datei ist natürlich nach sp_se_rec und sp_sparaid indiziert. Tabelle und Index sind mit SQL erstellt worden.
Wir haben festgestellt, dass das Ermitteln einer neuen Nr. ziemlich lange dauert. In einem Programm haben wir das Verfahren auf nativen RPG-Zugriff umgestellt (SETGT, READPE). Das geht dramatisch schneller (ca. Faktor 100).
Wenn wir Visual Explain richtig verstehen, generiert das SQL-Statement jedesmal eine temporäre Liste (manchmal mit allen Datensätzen der Tabelle). Ich vermute mal, dass SQL mit dem Erzeugen einer Kopie der Daten die Konsistenz der Daten sicherstellen will. Das wäre in unserem Fall aber nicht nötig. Ich weiß, dass keine Sätze (unter dem Schlüssel sp_se_rec) in die Datei geschrieben werden, solange das SQL-Statement läuft. Kann ich SQL irgenwie sagen, dass es auf das Kopieren der Daten verzichten soll?
Zur Klarstellung: Wenn ich eben von langer Ausführungszeit geschrieben haben, bewegen wir uns natürlich immer noch im Millisekundenbereich. Aber da extrem viele Sätze in sehr kurzer Zeit geschrieben werden, machen auch ein paar Millisekunden große zeitliche Probleme.
Gruß,
Dieter
wir müssen vor dem Schreiben von Datensätzen eine laufende Nr. für den neuen Datensatz vergeben. Es geht nicht um eine eindeutige laufende Nr. in der Datei, sondern um eine laufende Nr. pro "Auftrag". Das haben wir mit folgendem SQL umgesetzt:
select max(sp_sparaid) into :newNr
from idmspara where sp_se_rec = 107275170;
Die Datei ist natürlich nach sp_se_rec und sp_sparaid indiziert. Tabelle und Index sind mit SQL erstellt worden.
Wir haben festgestellt, dass das Ermitteln einer neuen Nr. ziemlich lange dauert. In einem Programm haben wir das Verfahren auf nativen RPG-Zugriff umgestellt (SETGT, READPE). Das geht dramatisch schneller (ca. Faktor 100).
Wenn wir Visual Explain richtig verstehen, generiert das SQL-Statement jedesmal eine temporäre Liste (manchmal mit allen Datensätzen der Tabelle). Ich vermute mal, dass SQL mit dem Erzeugen einer Kopie der Daten die Konsistenz der Daten sicherstellen will. Das wäre in unserem Fall aber nicht nötig. Ich weiß, dass keine Sätze (unter dem Schlüssel sp_se_rec) in die Datei geschrieben werden, solange das SQL-Statement läuft. Kann ich SQL irgenwie sagen, dass es auf das Kopieren der Daten verzichten soll?
Zur Klarstellung: Wenn ich eben von langer Ausführungszeit geschrieben haben, bewegen wir uns natürlich immer noch im Millisekundenbereich. Aber da extrem viele Sätze in sehr kurzer Zeit geschrieben werden, machen auch ein paar Millisekunden große zeitliche Probleme.
Gruß,
Dieter