-
Hallo Sam,
habe ich auch schon probiert, bekomme
aber die Fehlermeldung:
"SQL-Status: 42601
Vendorencode: -199
Nachricht: [SQL0199] Schlüsselwort WHERE nicht erwartet. Gültige Token: <ENDE DER ANWEISUNG>. Ursache . . . . : Schlüsselwort WHERE wurde an dieser Stelle nicht erwartet."
Gruß
svt
-
Hallo!
Könntest du eventuell das SQL Statement hier posten?
LG,
Sam
-
Hallo Sam,
(sorry bin noch neu!!)
habe ich auch schon probiert, bekomme
aber die Fehlermeldung:
"SQL-Status: 42601
Vendorencode: -199
Nachricht: [SQL0199] Schlüsselwort WHERE nicht erwartet. Gültige Token: <ENDE DER ANWEISUNG>. Ursache . . . . : Schlüsselwort WHERE wurde an dieser Stelle nicht erwartet."
Gruß
svt
-
Könntest du bitte einmal deine SQL abfrage posten.
Sonst können wird leider nichts mit der Fehlermeldung anfangen.
LG
Tobi
-
Fetch 500 Rows only wird wahrscheinlich auch nicht helfen, sofern ein Zugriffspfad, der anders als die Order By-Anweisung geschlüsselt ist verwendet wird.
Das oberste Ziel des Optimizers ist so schnell wie möglich an die gewünschten Daten zu kommen und da werden die Where-Bedingungen vorrangig geprüft und erst anschließend die Order By-Anweisungen. Die Daten werden also sehr oft in temporären Objekten gespeichert und erst anschließend sortiert.
Wird also zusätzlich ein Fetch For 500 Rows angegeben, läuft zunächst die komplette Abfrage durch und aus dem kompletten Ergebnis werden dann die ersten 500 Sätze ausgegeben.
Die kannst die Abfrage nur dadurch beschleunigen, dass Du die Abfrage analysierst (z.B. mit STRDBG oder Visual Explain) und die optimalen Zugriffswege anlegst.
Birgitta
-
Hallo Birgitta,
kannst du mir beim Umbauen des SQl helfen, da relativ Neuland für mich!!!
Danke svt
-
Hi svt,
nur als Info:
Zugriffspfad = Index
Du musst also Prüfen ob es für diese Tabelle einen Entsprechenden Index gibt der als Key-Felder deine WHERE-Bedingung abbildet.
Interessant wäre auch (wie Sam schon schrieb) um wieviele Sätze es sich hier handelt?
UND wieviele Sätze du als Ergebnis erhälst?
In welcher Umgebung rufst du das Statment auf? RPG? ODBC? STRSQL?
-
 Zitat von andreaspr@aon.at
Hi svt,
nur als Info:
Zugriffspfad = Index
iSeries Navigator
S658680.brkdatv6.phisttp
Du musst also Prüfen ob es für diese Tabelle einen Entsprechenden Index gibt der als Key-Felder deine WHERE-Bedingung abbildet.
Interessant wäre auch (wie Sam schon schrieb) um wieviele Sätze es sich hier handelt?
circa 1 Mil.
UND wieviele Sätze du als Ergebnis erhälst?
im Moment ca. 30000
In welcher Umgebung rufst du das Statment auf? RPG? ODBC? STRSQL?
über ODBC und eine 2 MGBit Standleitung
Ich hoffe das Du damit was anfangen kannst
-
 Zitat von svt
Ich hoffe das Du damit was anfangen kannst
Du müsstest mal die SQL Anweisung über den Visual Explain analysieren lassen.
1 Million Sätze sind wirklich nicht viel.
30.000 Sätze als Ergebnis hingegen schon!
Also du solltest wie folgt vorgehen:
1. Schau ob ein Index vorhanden ist. Wenn nein, solltest du einen entsprechenden erstellen.
Visual Explain oder der Index Advisor im iSeries Navigator kann dir dabei helfen.
2. Was passiert mit den Sätzen. Wenn du z.B. 30.000 Sätze in .Net in ein DataGrid ausgeben lässt, dauert das auch seine Zeit.
3. Umgebungsvariablen prüfen (Cachen der Daten usw.)
4. Hoffe du hast für eure 2 MGBit Standleitung einen Waffenschein
-
Wenn du über ODBC arbeitest, solltest du nur prüfen ob für die Felder der Where-Klausel ein Index exisitiert, falls nicht, erstelle einfach per "CREATE INDEX brkdatv6.phisttpIX on brkdatv6.phisttp (tpkonz, TPVART, TPNBHF)"
Das dauert dann einen Moment, aber es hilft bei der Abfrage.
Den "Order By" kannst du weglassen, da du das Resultset (Java)/Recordset (ADODB) am besten dann selber sortierst.
Ein Problem für den Optimizer existiert immer dann, wenn die Order-By-Klausel komplett andere Felder enthält als die Where-Klausel.
Das kannst du lösen, in dem du in die Order-By-Klausel die Where-Felder an den Anfang mit aufnimmst und den Index nach inten um die restlichen Felder ergänzt.
Wenn du mit ADODB arbeitest, kannst du auch einen Server-Cursur verwenden, so dass das Recordset nicht sofort komplett abgerufen wird (bei einer 2MBIT-Leitung ggf. sinnvoll), sondern erst mit einem MoveNext.
In Java müsste es ähnliches geben.
-
 Zitat von Fuerchau
In Java müsste es ähnliches geben.
... depends on driver, aber ich kenne keinen Treiber, der versucht die fremde Datenbank rüber zu zerren.
D*B
-
Hallo Zusammen,
Vielen Dank für Eure schnelle Hilfe,
es funktioniert jetzt wunderbar, ich glaube
der Index war der größte bringer, toll !!
Gruß
svt
Similar Threads
-
By AndreasH in forum IBM i Hauptforum
Antworten: 13
Letzter Beitrag: 08-05-15, 13:09
-
By USDAVIS in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 25-08-09, 11:51
-
By cicero22 in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 14-08-09, 13:00
-
By pedro-zapata in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 11-09-06, 12:34
-
By linguin in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 04-08-06, 10:38
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks