PDA

View Full Version : SQL Datenreihenfolge



Seiten : [1] 2

Jenne
13-11-07, 13:50
Hallo Kollegen,

ich habe eine Merkwürdigkeit.
Wenn ich mit folgendem SQL Statement eine Abfrage auf meine Datei mache :

SELECT rrn(File), VORSCHL_NR, POS_NR FROM
File WHERE VORSCHL_NR = 100

erhalte ich folgendes Ergebnis :
RRN (File) VORSCHL_NR POS_NR
8.893 100 1
8.894 100 2
8.895 100 3
8.896 100 4
8.897 100 5
8.898 100 6
8.899 100 7
8.900 100 8
8.902 100 10
8.903 100 11
8.904 100 12
8.907 100 15
8.901 100 9

bei folgenden Statement :
SELECT rrn(File), VORSCHL_NR, POS_NR FROM
bev_pos WHERE VORSCHL_NR > 100

ist das Ergebnis :

RRN ( BEV_POS ) VORSCHL_NR POS_NR
8.893 100 1
8.894 100 2
8.895 100 3
8.896 100 4
8.897 100 5
8.898 100 6
8.899 100 7
8.900 100 8
8.901 100 9
8.902 100 10
8.903 100 11
8.904 100 12
8.905 100 13
8.906 100 14
Die Reihenfolge ist im oberen Statement nicht richtig. (Siehe Pos_nr 9).

Die gleiche Datei wird mit ORION auf ein anderes System gespiegelt. Dort habe ich nicht diese Merkwürdigkeit.
Wir haben vor kurzem von V5R3 auf V5R4 gewechselt. Hat es damit etwas zu tun und wie kann ich das bereinigen.

Danke für Eure Hilfe
Jenne

Fuerchau
13-11-07, 15:05
Wenn du keinen "Order By" verwendest, ist die Sortierfolge nicht gewährleistet sondern ist bedingt durch die Verwendung von Zugriffspfaden, Eingangsfolge bei REUSEDLT(*NO), oder Satz-Nr. bei REUSEDLT(*YES).

Jenne
13-11-07, 15:11
Hallo Fuerchau,

bei beiden Dateien ist REUSEDLT = *YES

Gruß
Jenne

Fuerchau
13-11-07, 15:16
Aber beide Systeme sind nun mal nicht identisch und was ein Optimizer da treibt ist auch nicht gewährleistet.

Warum sträubst du dich gegen ein simples "order by VORSCHL_NR, POS_NR " ?

Die RRN ist sowieso auch keine verlässliche Information.

Jenne
13-11-07, 16:12
Hallo Fuerchau,

ich sträube mich nicht gegen ein Order by, ich möchte es nur verstehen und eine Erklärung dafür haben.

Gruß
Jenne

Pikachu
13-11-07, 16:14
Hat das andere System das selbe Betriebssystem-Release und den selben PTF-Stand?

Ergänzung:

Das Ergebnis der zweiten Abfrage kann nicht stimmen!?
Die Abfrage liefert doch hoffentlich keine Werte, die nicht zur WHERE-Bedingung passen?

Jenne
13-11-07, 16:28
Hallo Pikachu,

hatte mich bei der 2. where Bedinung verschrieben sollte >= sein. Beide Systeme haben V5R4 und wurden in einem Abstand von 3 Wochen auf diesen Release-Stand gebracht.

Gruß
Jenne

B.Hauser
14-11-07, 09:14
Hallo,

zur Erklärung:
Bei der ersten Abfrage = 100 verwendet der Optimizer einen Zugriffsweg (Index), da die Daten auf diese Art und Weise am schnellsten ermittelt werden können.

Bei der zweiten Abfrage wird nach Eingangsfolge gelesen, da die Daten auf diese Art und Weise am schnellten ermittelt werden können.

Der Optimizer verwendet einen Zugriffsweg, sofern ein passender Zugriffsweg angelegt ist und das Ergebnis bis ca. 20% der Gesamtanzahl der Datensätze umfasst.

Wird die Abfrage von der SQE ausgeführt wird die Anzahl der auszugebenden Sätze über die Statistiken ermittelt. Bei Ausführung über die CQE werden Schätzwerte verwendet. Bei einer Abfrage auf = wird von 10% ausgegangen und bei einer > oder < Abfrage von 33%.

Jenne
14-11-07, 09:38
Ich Danke Euch allen für die vielen Erklärungen.

Jetzt habe ich es verstanden

Gruß
Jenne

Spateneder
14-11-07, 10:00
Aber beide Systeme sind nun mal nicht identisch und was ein Optimizer da treibt ist auch nicht gewährleistet.

Warum sträubst du dich gegen ein simples "order by VORSCHL_NR, POS_NR " ?

Die RRN ist sowieso auch keine verlässliche Information.

Obwohl alle Fragen beantwortet sind, möchte ich mich gerne Fuerchaus Aussage anschließen, weil ich finde, dass der Thread (gemessen am eigentlichen Problem) ziemlich esotherisch geworden ist, und dass Fuerchaus Statement wichtig ist. Was spricht dagegen, in eine Anweisung das hineinzuschreiben, was man haben will? Dann ist sie später auch für andere nachvollziehbar, ganz ohne Woodoo.