Inner-Join zerstückeln

Getting started ... Alles für einen gelungenen Start.
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Inner-Join zerstückeln

Beitrag von Bugfix13 (ForumUser / 97 / 17 / 5 ) »
Hallo Zusammen

Ich habe noch immer Performaceprobleme mit meinem Inner Join.
Ich möchte nun gerne den Inner-Join auseinandernehmen und in kleinere Selects aufteilen.
Wie bringe ich es jedoch hin, dass mir auch die selben Zeilen summiert und gruppiert werden wie beim Inner Join?

Hier mein Inner-Join

Code: Alles auswählen.

    SELECT kna1~kunnr  kna1~name1  kna1~ort01 SUM( lgmng ) meins FROM
    lips
    INNER JOIN vbak
    ON vbak~vbeln = lips~vgbel
    INNER JOIN kna1
    ON kna1~kunnr = vbak~kunnr
    APPENDING TABLE t_2790_2
    WHERE lips~matnr = '000000000008603596'
    AND   lips~werks = '5110'
    AND   lips~sobkz = space
    GROUP BY kna1~kunnr meins kna1~name1  kna1~ort01
    ORDER BY kna1~kunnr meins kna1~name1  kna1~ort01.
Zerstückelter Code ohne Summierung/Gruppierung:

Code: Alles auswählen.

  TYPES: BEGIN OF r_data_2790_2,
       kunnr TYPE kna1-kunnr,
       name1 TYPE kna1-name1,
       ort01 TYPE kna1-ort01,
       enmng TYPE resb-enmng,
       meins TYPE resb-meins,
     END OF r_data_2790_2.

  DATA: t_2790_2 TYPE STANDARD TABLE OF r_data_2790_2,
        wa_2790_2 TYPE r_data_2790_2.

  DATA: t_lips TYPE TABLE OF lips.
  FIELD-SYMBOLS: <fs_lips> TYPE lips.

  SELECT vgbel lgmng meins FROM lips
    INTO CORRESPONDING FIELDS OF TABLE t_lips
    WHERE matnr = '000000000008603596'
    AND   werks = '5110'
    AND   sobkz = space.

  DATA: w_kunnr TYPE vbak-kunnr,
        w_vbeln TYPE vbak-vbeln,
        w_name1 TYPE kna1-name1,
        w_ort01 TYPE kna1-ort01.

  LOOP AT t_lips ASSIGNING <fs_lips>.

    SELECT SINGLE vbeln kunnr FROM vbak
      INTO (w_vbeln, w_kunnr)
      WHERE vbeln EQ <fs_lips>-vgbel.

    SELECT SINGLE name1 ort01 FROM kna1
      INTO (w_name1, w_ort01)
      WHERE kunnr EQ w_kunnr.

    MOVE: w_kunnr TO wa_2790_2-kunnr,
          w_name1 TO wa_2790_2-name1,
          w_ort01 TO wa_2790_2-ort01,
          <fs_lips>-lgmng TO wa_2790_2-enmng,
          <fs_lips>-meins TO wa_2790_2-meins.
    APPEND wa_2790_2 TO t_2790_2.

  ENDLOOP.

Danke für die Hilfe!!

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Inner-Join zerstückeln

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Was Du suchst, koennte der Befehl

Code: Alles auswählen.

COLLECT
sein.

Du musst Dir ohne den JOIN eben selber etwas im LOOP zusammenbasteln.

In dem JOIN findet (falls es keinen Index auf MATNR und/oder WERKS gibt) ein Fulltablescan statt. D.h. es wird bei jedem Zugriff ueber die komplette LIPS selektiert.
Das wird beim naechsten Versuch aber wieder genaus so ein.

Es gibt eben zeitintensive Tabelle. Und je nach Selektion wird das oft zur Herausforderung....

Ein Index auf MATNR in der LIPS koennte einen Performancevorteil bringen. Falls es diesen Index nicht schon gibt!


Nur als Hinweis fuer evtl. weiter Performanceverbesserungesmoeglichkeiten:
http://www.stechno.net/sap-notes.html?v ... &id=185530

Folgende Benutzer bedankten sich beim Autor Unit605 für den Beitrag:
Bugfix13


Re: Inner-Join zerstückeln

Beitrag von wreichelt (Top Expert / 1031 / 29 / 188 ) »
Hallo Bugfix13,

ich hatte ja an anderer Stelle schon mal auf den OSS-Hinweis 185530 hingewiesen.

SAP empfielt für die Selektion einer Materialnummer über die LIPS unbedingt den VIEW VLPMA zu verwenden.

alt:
SELECT vgbel lgmng meins FROM lips
INTO CORRESPONDING FIELDS OF TABLE t_lips
WHERE matnr = '000000000008603596'
AND werks = '5110'
AND sobkz = space.
Neu:
SELECT vgbel lgmng meins FROM vlpma
into ......

Gruß
Wolfgang

Re: Inner-Join zerstückeln

Beitrag von Bugfix13 (ForumUser / 97 / 17 / 5 ) »
Hallo Zusammen

Also zuerst zum Index:
Ein Index besteht schon auf die MATNR auf der Tabelle LIPS, ebenfalls einer auf die VGBEL..
Ich habe den OSS-Hinweis ausprobiert, jedoch hat der nichts gebracht --> Im Gegenteil die Abfrage ist noch langsamer geworden.

Mit dem oben angegeben Select benötigt die Abfrage 260 Sekunden, mit den Tabellen aus dem OSS-Hinweis 320s.
Das ist so extrem lange, dass es nicht mehr akzeptabel ist..

Danke für den Tipp mit COLLECT, war genau dass was ich gesucht habe.

Re: Inner-Join zerstückeln

Beitrag von wreichelt (Top Expert / 1031 / 29 / 188 ) »
Hallo Bugfix13,

ich habe einen kleine Report erstellt und über die LIPS gestartet.
Bei uns hat die LIPS keinen Index über die Materialnummer.

Bei Select * from LIPS where matnr = '.........' and werks = '.....' war die Dauer über ST05 453.370.


Bei Select * from VLPMA where matnr '.......'.
select * from LIPS where vbeln = vLPMA-vbeln and posnr = VLPMA-posnr.

Dauer über ST05 39.404, dazu kam das lesen der LIPS mit 12.013.
endseelct.
endslect.

Gruß
Wolfgang

Re: Inner-Join zerstückeln

Beitrag von bigld (ForumUser / 9 / 1 / 3 ) »
Hi

ist zwar etwas off-Topic, aber zum Testen von SELECTS und auch JOINs bietet sich das SQL Cockpit an.
Damit kann ich schon während der Entwicklung die Performance meiner Selects auf der Produktivmaschine prüfen

http://www.cadaxo.com/content/de/produkte.html

lg
Domi
--------------------------------------------------------------------------------------------------------------
Die Performance und Ergebnisse von SELECTs und JOINs im Produktivsystem überprüfen?
=> SQL Cockpit
http://www.cadaxo.com

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1628
Views
Zerstückeln eines Pfades
von Greenhorn » 09.02.2006 10:46 • Verfasst in ABAP® für Anfänger
1
Antw.
769
Views
Join mit Left Outer Join
von Rude1986 » 17.01.2021 19:53 • Verfasst in ABAP® für Anfänger
8
Antw.
987
Views
Inner Join
von L0w-RiDer » 06.11.2019 09:47 • Verfasst in ABAP® für Anfänger
3
Antw.
3260
Views
Was ist ein Join?
von Schmarsi » 28.09.2010 11:37 • Verfasst in ABAP® für Anfänger
17
Antw.
7141
Views
JOIN
von robin1at » 22.02.2006 17:28 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.