[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2
  1. #13
    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

  2. #14
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von svt Beitrag anzeigen

    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

  3. #15
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #16
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von Fuerchau Beitrag anzeigen
    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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

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

  6. #18
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    @Dieter
    Bei ADODB (ActiveX, OLEDB/ODBC) ist es leider so, dass beim Öffnen eines Recordsets in abhängigkeit des CursorTyps (Client, Server), bei einem Client-Cursor (Default!) das komplette Recordset tatsächlich geladen wird, wobei da der Speicher schon mal knapp werden kann. Ein wenig kann man da noch mit den Page-Einstellungen arbeiten.

    Bei .NET habe ich ja auch zuerst mal einen DBReader, wende ich allerdings den Reader auf eine DataTable per Fill-Methode an, werden auch hier alle Daten geladen.

    Ich muss also selber entscheiden, ob ich alles lade oder nicht.

    In Java habe ich ja auch erst mal nur das Resultset, was dem Reader in .NET entspricht.
    Daher auch die unterschiedliche Benennung.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #19
    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

  8. #20
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    "Select ... Into" geht nur bei embedded SQL und da dann auch nur bei genau 1 Satz.
    ODBC ist aber CLI-Basiert, da muss man mit Cursor und Resultsets arbeiten.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #21
    Registriert seit
    Sep 2011
    Beiträge
    20
    Hallo Fuerchau,

    ich habe noch mal eine Frage zu den erstellten Index, hat dieser irgend welche anderen (evtuell negativen)Auswirkungen auf die Tabelle.
    Ich habe sonst keinen weiteren Index
    auf unserer AS400 gesehen und da ich auf diesen Gebiet noch ein Anfänger bin, frage ich lieber nochmal nach!!!!

    Danke

    Gruß
    svt

  10. #22
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Ein Index ist eine geschlüsselte logische Datei, die mit SQL erstellt wurde.

    Ein einzelner (zusätzlicher) Index wird keine negativen Auswirkungen auf die Performance haben.

    Viele zusätzliche Indices, wie auch viele geschlüsselte logische Dateien können die Performance beim Einfügen, Ändern und/oder Löschen von Datensätzen in der darunterliegenden physischen Datei oder SQL Tabelle beeinträchtigen. Bei Datenänderung werden jeweils alle Zugriffswege (Indices und geschlüsslete logische Dateien) aktualisiert.

    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

  11. #23
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Die Anwendung merkt von dem Index fast nichts.
    Ein Index kostet nur Performance beim Schreiben und Löschen.
    Da kommt es dann auf die Anzahl der Operationen an. Bei 10.000 und mehr Operationen pro Sekunde (gecached) merkt man das dann tatsächlich erst bei einer großen Anzahl.

    Ich habe hier Dateien mit teilweise mehr als 50 Indizes (mit und ohne Select) ohne merkliche Einbuße.

    Probleme gibt es nur dann, wenn die Dateistruktur geändert werden soll, dass dauert dann schon mal ein bisschen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #24
    Registriert seit
    Sep 2011
    Beiträge
    20
    Ich danke Euch, dann bin ich ja beruhigt!!

    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
  •