[NEWSboard IBMi Forum]

Thema: index oder lf

Hybrid View

  1. #1
    Registriert seit
    Dec 2003
    Beiträge
    89
    Hallo nochmal,

    Danke für die Antworten bisher.
    @Dieter
    Wenn ich einen create index mache, beinträchtig das die bestehenden RPG-Anwendungen/PFs und LFs nicht ?
    d.h. LF und INDEX kommen sich nicht in die Quere.

    Ich möchte zwei Tabellen verknüpfen.
    Tabelle taba
    af1
    af2
    af3
    af4
    ...
    af50

    Tabelle tabb
    bf1
    bf2
    bf3
    ...
    bf30

    PHP-Code:
    SELECT a.af1,a.af2,a.af3,b.bf30 
    FROM taba a INNER JOIN tabb b 
    ON a
    .af1 b.bf1 AND a.af2 b.bf2 AND a.af3 b.bf3
    WHERE a
    .af3 4711 AND a.af50 <> '' 
    Ziel ist, alle Sätze aus a, bei denen af50 gefüllt und af3=4711, und alle passenden aus b.

    Was muss ich beachten, damit das SQL-Statement flott abgearbeitet wird?
    Welche Felder müssen indiziert sein ?
    (Birgitta schreibt ja, dass man LFs nicht verwenden soll)
    Nach diesem Muster habe ich versucht einen Join bei uns zu testen, aber der war recht langsam.

    Danke für eure Hilfe
    Gruß jogi

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.934
    Hallo,

    logische Dateien und SQL indices können nebeneinander existieren, sie können sogar den gleichen Zugriffsweg verwenden (Shared Access Path).

    Man sollte allerdings beachten, wenn man einen SQL index und eine DDS beschriebene logische Datei hat, dass man den Index zuerst erstellt und die logische Datei anschließend. In diesem Fall wird nur ein einziger Zugriffspfad erstellt. Im umgekehrten Fall werden 2 Zugriffspfade erstellt, die beide bei jedem Insert, Update oder Delete auf die physische Datei bzw. Tabelle aktualiert werden müssen.

    Für eine gejointe Abfrage müssen Zugriffswege (in logischen Dateien oder SQL Indices) über die Felder, über die gejoint werden soll vorhanden sein. Weiterhin ist vorteilhaft, wenn die Felder, die in der Where-Bedingung mit = abgefragt werden ebenfalls in dem Index angegeben sind.

    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

  3. #3
    Registriert seit
    Dec 2003
    Beiträge
    89
    Hallo Birgitta
    Für eine gejointe Abfrage müssen Zugriffswege (in logischen Dateien oder SQL Indices) über die Felder, über die gejoint werden soll vorhanden sein. Weiterhin ist vorteilhaft, wenn die Felder, die in der Where-Bedingung mit = abgefragt werden ebenfalls in dem Index angegeben sind.
    bedeutet dass, es muss ein LF für taba mit genau den Feldern
    af1,af2,af3 und af50
    und
    ein LF für tabb mit genau den Feldern
    bf1,bf2,bf3
    existieren

    oder können in den LFs auch weitere Felder vorhanden sein, und die SQL-Enginge sucht sich dann seinen richtigen Weg ?

    jogi

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    Der Create Index tangiert die Anwendungen, die per ISAM Methoden zugreifen (was anderes ist der sogenannte native I/O nicht. nicht negativ. Was deinen Join angeht, solltest du auf alle Fälle bei beiden Tabellen einen gleich gestaffelten Index über die Join Felder anlegen. Bei der where Klausel hat die Bedingung für a.af3 eine hohe Selektivität, sollte dahinter eine unique Bedingung liegen, dann sollte man auch diese in der Datenbank als Constraint oder unique Index anlegen; die Bedingung für af50 lässt sich nicht unterstützen.
    Im richtigen Leben legt man zuerst alle fachlich erforderlichen Constraints an ( Primary Key, unique Bedingungen und referentielle Bedingungen, wie bei jeder SQL Datenbank eben und das war dann 80 % der Arbeit, den Rest kann man sich auch von der Datenbank sagen lassen, wenn der Job unter debug läuft sagt die Datenbank in dignostic Meldungen welche Indexe helfen könnten.
    Bezüglich langsam: was ist denn hier konkret unter langsam zu verstehen?

    D*B
    Zitat Zitat von jogisarge Beitrag anzeigen
    Hallo nochmal,

    Danke für die Antworten bisher.
    @Dieter
    Wenn ich einen create index mache, beinträchtig das die bestehenden RPG-Anwendungen/PFs und LFs nicht ?
    d.h. LF und INDEX kommen sich nicht in die Quere.

    Ich möchte zwei Tabellen verknüpfen.
    Tabelle taba
    af1
    af2
    af3
    af4
    ...
    af50

    Tabelle tabb
    bf1
    bf2
    bf3
    ...
    bf30

    PHP-Code:
    SELECT a.af1,a.af2,a.af3,b.bf30 
    FROM taba a INNER JOIN tabb b 
    ON a
    .af1 b.bf1 AND a.af2 b.bf2 AND a.af3 b.bf3
    WHERE a
    .af3 4711 AND a.af50 <> '' 
    Ziel ist, alle Sätze aus a, bei denen af50 gefüllt und af3=4711, und alle passenden aus b.

    Was muss ich beachten, damit das SQL-Statement flott abgearbeitet wird?
    Welche Felder müssen indiziert sein ?
    (Birgitta schreibt ja, dass man LFs nicht verwenden soll)
    Nach diesem Muster habe ich versucht einen Join bei uns zu testen, aber der war recht langsam.

    Danke für eure Hilfe
    Gruß jogi
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. Datenart in LF ändern
    By Mr.iSeries in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 25-01-07, 09:46
  2. Index statt LF-was bedeutet das?
    By deni87991 in forum IBM i Hauptforum
    Antworten: 21
    Letzter Beitrag: 07-08-06, 17:42
  3. Reihenfolge der Sätze im LF
    By alexander may in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 08-12-05, 20:25
  4. DDS - LF - numerisch in alpha
    By Tobse77 in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 22-06-05, 10:02
  5. drop view für LF
    By Robi in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 06-04-05, 17:59

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •