PDA

View Full Version : query dateiverwendung



Robi
22-10-09, 13:00
Hi *all

hier wird ein query als zu langsam bemängelt.

Es werden 2 Dateien miteinander verknüpft, gleiche Sätze
über 2 Felder

Beide Dateien haben als PF einen Key der nicht passt.
Beide Dateien haben (mindestens) ein LF, das passt.
Aber die passenden LF haben 5 oder mehr Keyfelder, die ersten beiden passen. Alle LF ohne select / ommit
Von der Primären Datei wird kein LF verwendet, von der sekundären wird ein LF verwendet.
Im Joblog steht der Ursachencode 4 : die Kosten für die verwendung ... ( es dauert zu lange)

fehlt hier ein PTF oder ist das 'State of Art'
THX
Robi

Fuerchau
22-10-09, 13:49
Wenn du den Query unter STRDBG machst, wird dir ein passender Schlüssel vorgeschlagen.

Leg diesen doch einfach mal an (CRTLF oder SQL CREATE INDEX).

Robi
22-10-09, 14:03
Ja, schön wär's
ist aber nicht meine Anwendung, ich darf nicht.
(Wieso noch ne logische nach xxFeld, nim doch LF03, die ist Vorne nach xxFeld sortiert)

Robi

cbe
22-10-09, 14:14
Wieso noch ne logische nach xxFeld, nim doch LF03, die ist Vorne nach xxFeld sortiert

das stimmt auch, wenn die ersten Felder passen und keine S/O drin sind sollte die LF auch genommen werden.

Manchmal entschließt sich das SQL auch, die Keys zu ignorieren, z.B. wenn nur wenige Sätze drin sind.

Hast Du den Tip mit STRDBG schon probiert? Dann siehst Du im Joblog, welche Zugriffe wirklich verwendet wurden und was das System empfiehlt.

Gruß,
Christian

Fuerchau
22-10-09, 14:40
Beim Query kannst du die LF (bzw. den Index) nicht explizit angeben.
Wenn dein Query zu langsam ist, und du keinen Index erstellen darfst, musst du halt mit der Antwortzeit leben.
Ein Index ist mehr für den Optimizer gedacht als später über ein Programm darauf zuzugreifen. Bei SQL-Programmen grift man auch nicht auf den Index zu.

Ansonsten prüfe mal die Satzauswahl. Ggf. sind hier eben Felder ausgewählt für die kein Index existiert.

B.Hauser
22-10-09, 16:41
Reden wir von QUERY/400 oder SQL?

Wenn wir von Query/400 reden können die ganzen Spekulationen über SQE und logische Dateien mit Select/Omit-Anweisungen vergessen werden. Query/400 wird mit der CQE ausgeführt und es ist auch nicht geplant dies je auf die SQE zu hieven (dafür gibt es ja DB2 WebQuery).

Da wir von der CQE reden, wäre es durchaus eine Möglichkeit anstatt der physichen Dateien die logischen Dateien mit den passenden Schlüssel-Feldern zu verwenden. Im Gegensatz zu SQL-Indices können logische Dateien durchaus in SQL-Abfragen oder QUERY/400 anzugeben (auch wenn man dies unterlassen sollte!).

Die CQE verwendet manchmal in Ausnahmefällen, z.B. wenn die Abfrage zu komplex ist oder die Optimierung einen Timeout erhält, die angegebene logische (ohne Optimierung!).

Eine weitere Möglichkeit die CQE zu beeinflussen, wäre das Ergebnis nach den ersten beiden Schlüsseln zu sortieren (sofern dies möglich ist).

Eventuell kann die Abfrage auch dadurch beschleunigt werden, dass bei der Tabellen/Datei-Auswahl die 2. Datei (für die ein Zugriffsweg verwendet wird) zuerst angegeben wird (sofern über GLEICH verknüpft wird). GGf. selektiert der Optimzer dann schon entsprechend vor und verwendet für die 2. Datei auch einen Index.

Ansonsten gibt es, sofern zusätzliche Zugriffswege nicht erlaubt sind wenig Möglichkeiten.

Birgitta