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

Hybrid View

  1. #1
    Registriert seit
    Nov 2009
    Beiträge
    208

    SQL index auf view

    Hallo
    wir haben in einer Datei 2 Namen.
    Einmal ER, einmal SIE

    um bei Fremddaten die richtige Anrede zu bestimmen habe ich eine View auf die Datei gelegt.

    PHP-Code:
     create view VORNAMEN as(
    select distinct anredeupper(vna1) as vnam from DATEI where anrede=1  
    union all                                                                 
    select distinct anrede
    upper(vna2) as vnam from DATEI where anrede=2); 
    nun möchte ich schnell nach einem Namen suchen (SQLRPGLE)

    PHP-Code:
    /exec sql
    set :myanrede = (select min(anredefrom VORNAMEN where upper(:myvorname) = vnam)
    /
    end-exec 
    Dazu wollte ich einen Index auf VORNAMEN legen.
    Das geht aber nicht

    Welchen Index muß ich anlegen, es sind ja in der Basis Datei 2 Felder, und das Upper kommt ja auch hinzu.

    Danke
    Dietlinde Beck

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Einen Index auf Views gibt es nicht sondern nur auf Tables.
    Du kannst aber einen berechneten Index "upper(Vname)" erstellen.
    Wenn die Where-Klausel dann genau mit dieser Berechnung übereinstimmt, wird der Index auch verwendet.
    ... where upper(: MyVname) = upper(Vname)

    "Distinct" führt aber u.U. trotzdem zum Tablescan.
    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

  3. #3
    Registriert seit
    Nov 2009
    Beiträge
    208
    Hallo und danke,
    D.H. ich mache das distinct weg
    --> geht ein group?


    und erzeuge 2 (ZWEI) Indexe je einen auf upper(VNAM1) und einen auf upper(VNAM2)

    und hoffe dann das sql BEIDE verwendet?

    Oder was bedeutet "berecheten Index"
    Dibe

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Die View brauchst du nicht.

    Create Index MyIndex1 on MyTable (upper(Name))
    Create Index MyIndex2 on MyTable (upper(VName))

    select min(Anrede) from MyTable where upper(name) = 'FÜRCHAU' or upper(VName) = 'FÜRCHAU'

    Ob tatsächlich beide Indizes verwendet werden hängt von vielen Optimierungskriterien ab.
    Wichtig ist, dass die Where-Klausel einem Index entsprechen muss. Eine Berechnung in der View wird ignoriert.
    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

  5. #5
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    Wie ist die Datei aufgebaut?
    Was steht in vnam1 und vnam2?

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Ich nehme mal an "Vornamen";-).
    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. #7
    Registriert seit
    Nov 2009
    Beiträge
    208
    Der Aufbau
    Anrede
    Nachname
    Vnam1
    Vnam2
    Iban1
    Iban2
    ...

    Der Inhalt
    1
    meier
    Hugo
    ./.
    DE12...
    ./.


    2
    müller
    ./.
    Heike
    ./.
    DE44 ...

    3
    Schmitt
    hans
    inge
    DE12...
    DE44...


    Nun bekomme ich von exten Daten
    Mal Hans, mal Inge aber immer ohne die Info Mann/Frau

    Das wollte ich mit EINEM Zugriff ermitteln

    Dietlinde Beck

  8. #8
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    ... und auch mal Dominique? :-)

  9. #9
    Registriert seit
    Nov 2009
    Beiträge
    208
    selbstverständlich

    siehe oben



    /exec sql
    + set :myanrede = (select
    min(anrede) from VORNAMEN where upper(:myvorname) = vnam)
    /
    end-exec

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Lege doch einfach mal die Indizes an und prüfe das Ergebnis mit der entsprechenden Abfrage auf die Tabelle. Für MIN(xxx) benötigst du nämlich keinen distinct vorher, also:

    select min(anrede) from datei
    where upper(: myvorname) = upper(vna1)
    or upper(: myvorname) = upper(vna2)

    Durch die Prüfung "upper(vna1)" sollte der passende Index1 gewählt werden.
    Dies ist der Grund für "berechnete" indizes, dass diese gewählt werden, wenn die Abfrage eine genau identische Where-Klausel aufweist.
    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

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.644
    Zitat Zitat von Pikachu Beitrag anzeigen
    ... und auch mal Dominique? :-)
    So weit muss man nicht gehen. Schon bei "Andrea" ist das Konzept wackelig

    -h
    www.RZKH.de
    IBM Champion 2022, 2023, 2024
    IBM i Community Advocate https://www.youracclaim.com/badges/6...c-7ad4ba147af6
    Common / CEAC
    http://pub400.com

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Stimmt, der Mann meiner angeheirateten Großcousine heißt Andrea und ist auch tatsächlich Italiener in der 3. Generation.
    Vielleicht hilft da noch ein Ländercode?
    Aber das war ja nicht die Aufgabenstellung.
    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

Similar Threads

  1. SQL View mit Index/Key
    By malzusrex in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 19-10-16, 19:53
  2. Antworten: 4
    Letzter Beitrag: 19-07-16, 12:44
  3. LF / SQL index
    By woodstock99 in forum NEWSboard Programmierung
    Antworten: 31
    Letzter Beitrag: 18-03-15, 14:29
  4. Cobol View und Index (V5R4)
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 29-12-14, 13:01
  5. Create Index
    By tarkusch in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 06-11-13, 12:44

Berechtigungen

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