[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  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.206
    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.206
    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.206
    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.206
    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
    Nov 2003
    Beiträge
    2.304
    Müßte die View nicht besser so lauten?

    CREATE VIEW VORNAMEN AS (
    SELECT DISTINCT 1 AS ANREDE, UPPER(VNAM1) AS VNAM FROM Datei WHERE VNAM1<>'' UNION
    SELECT DISTINCT 2 AS ANREDE, UPPER(VNAM2) AS VNAM FROM Datei WHERE VNAM2<>'')

  12. #12
    Registriert seit
    Nov 2009
    Beiträge
    208
    Dann habe ich keine doppelten Vornamen ER und Sie.

    dann müßte ich all diese Namen kennen.
    so kann ich sie suchen!
    Gerade bei Ausländischen Namen sehr hilfreich, auch um ggf zu ermitteln, das der Name NICHT für beide Geschlechter gültig ist. Dann ist ER eine Sie und das geschlecht wurde falsch angegeben.

    Herr Fuerchau
    das haben wir nun so gemacht, danke!

    DiBe

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
  •