Announcement

Collapse
No announcement yet.

Keine Performance in Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Keine Performance in Abfrage

    Hallo zusammen,

    ich habe folgendes Problem. Vorliegend habe ich eine Tabelle mit mehreren Millionen Einträgen. Hier sind mehrere Millionen Items gelistet, die mehrfach vorkommen können. Es handelt sich hierbei um eine unsortiere Historie der Items.

    Eine Verbindung zwischen den Historieneinträgen eines jeden Items wird über die "item_list_id" hergestellt. Jedes Item hat einen Bezug zum vorherigen Historieneintrag durch "_item_list_id_prev" und zum nachfolgenden "_item_list_id_next".

    Da es auch Items gibt die nur einen Eintrag haben, bzw. es auch immer ein erstes Item geben muss, was keinen "_item_list_id_prev" Eintrag hat (NULL), macht mir eine Abfrage Probleme.

    Ich möchte eine Abfrage starten, die mir jeweils die vorangegangenen zwei Einträge auch anzeigt. Der erste Ansatz hierzu sah folgendermaßen aus:

    Code:
    select pm.item_nr, pm.vdat Verarbeitung_M,
    trunc(prev.vdat) Fehlertag , prev.mkz Bearbeiter1, prev.vart ART1, prev.vdat, prev2.mkz, prev2.vart, prev2.vdat
    from pm_item_list pm, pm_item_list prev, pm_item_list prev2
    where pm.vdat_jul= 2455520
    and pm.status=31
    and pm.pro_item_list_prev=prev.pro_item_list_id
    and prev.pro_item_list_prev=prev2.pro_item_list_id
    Nun habe ich jedoch das Problem, dass aufgrund der Restriktion

    "and prev.pro_item_list_prev=prev2.pro_item_list_id"

    alle Ergebnisse rausfliegen, bei denen es keine zwei Vorgänger gibt. Hier sollte jedoch ein Ergebnis angezeigt werden (als NULL).

    Nun bin ich einen Schritt weitergegangen und habe dies mit einer Unterabfrage versucht:

    Code:
    select pm.item_nr, pm.vdat Verarbeitung_M,
    ( select prev.mkz 
    from pm_item_list prev
    where
    pm.pro_item_list_prev=prev.pro_item_list_id) Mitarbeiter_1, 
    
    ( select prev.vart 
    from pm_item_list prev
    where
    
    pm.pro_item_list_prev=prev.pro_item_list_id) Mitarbeiter_art1
    
    
    from pm_item_list pm
    where 
    
    pm.vdat_jul=2455520
    and pm.status=31
    Hier habe ich nur eine! Vorstufe drin, da mir hier die Performance schon total zusammenbricht.Das Ergebnis zeigt mir nun zwar alle Datensätze an (gegebenefalls für die Vorgängerwerte ein NULL), die Abfrage scheint aber nicht praktikabel zu sein, da mir bei einer weiteren Vorstufe (Unter/Unterabfrage) alles "in die Knie" geht.

    Gibt es vielleicht eine Möglichkeit die erste (schnelle) Abfrage irgendwie umzubauen?

    Ich hoffe mein Problem ist nicht zu abstrakt (sonst gerne nachfragen). Ich würde mich freuen, wenn jemand eine Idee zu meinem Problem hat.

    Im Voraus für jede Hilfe besten Dank.

    VG

  • #2
    versuchs mal -> left join

    Comment


    • #3
      Warum einfach, wenns auch kompliziert geht...

      Klar, das war die Lösung. Vielen Dank.

      Comment

      Working...
      X