[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Sep 2011
    Beiträge
    20

    fetch first (vor Where)???

    Hallo,

    ich bin noch ein Anfänger und habe folgende Frage:
    Ich habe eine Tabelle die täglich enorm wächst, bis jetzt habe ich diese ganz
    nomal abgefragt mit:

    Select...
    Where...
    Order By....
    diese Abfrage dauert aber mitlerweile ca. 10-15min, deswegen jetzt die Idee, nur mit den letzen 500 Datensätzen zu
    arbeiten (die auch nur für mich interresant sind).
    Wie kann man das am besten und vorallem Performen-schonensten lösen??

    Danke
    svt

  2. #2
    Registriert seit
    Jul 2011
    Beiträge
    31
    Hallo!

    Du könntest die Sortierung ändern (so dass die letzten Datensätze am Anfang stehen) und anschließend mit
    "fetch first 500 rows only" arbeiten.

    Select * from ....
    Where ...
    Order by ...
    fetch first 500 rows only

    Allerdings würde mich mal interessieren wieviele Milliarden Datensätze denn in dieser Tabelle liegen wenn eine Abfrage 10-15 Minuten dauert.

    LG,
    Sam

  3. #3
    Registriert seit
    Sep 2011
    Beiträge
    20

    Unhappy

    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

  4. #4
    Registriert seit
    Jul 2011
    Beiträge
    31
    Hallo!

    Könntest du eventuell das SQL Statement hier posten?

    LG,
    Sam

  5. #5
    Registriert seit
    Sep 2011
    Beiträge
    20
    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

  6. #6
    Registriert seit
    Sep 2011
    Beiträge
    29
    Könntest du bitte einmal deine SQL abfrage posten.
    Sonst können wird leider nichts mit der Fehlermeldung anfangen.

    LG
    Tobi

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Sep 2011
    Beiträge
    20
    Hallo Birgitta,

    kannst du mir beim Umbauen des SQl helfen, da relativ Neuland für mich!!!

    Danke svt

  9. #9
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    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?

  10. #10
    Registriert seit
    Sep 2011
    Beiträge
    20
    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    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

  11. #11
    Registriert seit
    Jan 2007
    Beiträge
    189
    Probier mal
    Select...
    Into...
    blah blah blah

    **Edit: heck! I didn't see there was a second page of this thread.
    mfg

    Kit
    www.ecofitonline.com
    DeskfIT - ChangefIT - XrefIT

  12. #12
    Registriert seit
    Sep 2011
    Beiträge
    20

    Abfrage

    Hallo Tobi,

    anbei das SQL:
    SELECT TPANR1, TPNBHF, TPBENR, TPIDEN, TPKMEN, TPVORT, TPVREG, TPVHOR, TPVVER, TPBMEN

    FROM brkdatv6.phisttp

    fetch first 500 rows only


    WHERE tpkonz='LCV' And TPVART='PAZ' And TPNBHF='PACKSTUBE'

    ORDER BY TPANR1 DESC , TPBENR, TPZUNR, TPTIA, TPPALN, TPANRP



    Gruß
    svt

Similar Threads

  1. Brauche Hilfe zu FETCH xxx USING DESCRIPTOR
    By AndreasH in forum IBM i Hauptforum
    Antworten: 13
    Letzter Beitrag: 08-05-15, 13:09
  2. SQL Fetch First 1 Rows
    By USDAVIS in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 25-08-09, 11:51
  3. Fetch first x rows only
    By cicero22 in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 14-08-09, 13:00
  4. FETCH n ROws in einzelne Felder einer DS
    By pedro-zapata in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 11-09-06, 12:34
  5. Group und fetch first xx rows
    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
  •