Perfrormance Tip

Hinweise, Tips und Tricks, FAQs - keine Anfragen!!
19 Beiträge • Seite 1 von 2 (current) Nächste
19 Beiträge Seite 1 von 2 (current) Nächste

Perfrormance Tip

Beitrag von GERDLA (Specialist / 116 / 0 / 0 ) »
Vielleicht ein kleiner Tipp für einige.
Das Program liest eigentlich nur die MARA
und MAKT, ohne Einschränkungen. Ziel den
Materialkurztext mit anzuzeigen.

Mit der normalen Select Anweisung eine
laufzeit von 47 Sekunden, mit dem Innerjoin 2
Sekunden.

Komplettes Coding mit mehr Beispielen (int. Tabs)
ist angefügt.

Normaler Selcet:

SELECT * INTO CORRESPONDING FIELDS OF I_TAB FROM MARA
WHERE MATNR in ZMATNR.

SELECT SINGLE * INTO CORRESPONDING FIELDS OF I_TAB FROM MAKT
WHERE MATNR = I_TAB-MATNR.

APPEND I_TAB.

zähler = zähler + 1.

ENDSELECT.

InnerJoin:


SELECT F~MATNR P~MAKTX

INTO (I_TAB-MATNR, I_TAB-MAKTX)
FROM MARA AS F INNER JOIN MAKT AS P
ON F~MATNR = P~MATNR
WHERE F~MATNR in ZMATNR.

APPEND I_TAB.

zähler = zähler + 1.

ENDSELECT.

viel spass :)

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


Beitrag von ewx (Top Expert / 4852 / 313 / 642 ) »
Mit "SELECT ... INTO TABLE ITAB" und der Verwendung von SY-DBCNT für die Anzahl der gelesenen Sätze wird's wahrscheinlich noch schneller...

Gruß, Enno.

Beitrag von deDieter ( / / 0 / 3 ) »
an dieser stelle kann ich nur an meinen lieblingsthread verweisen:
http://www.abapforum.com/forum/viewtopic.php?t=1421

ich liebe es ;)

deDieter

doppelt gequirlter code aus dem SQL Lehrbuch S. 258ff

Beitrag von Ulrich ( / / 0 / 3 ) »
mindestens eben so schnell:

Code: Alles auswählen.

data: begin of t occurs 0,
        matnr like makt-matnr,
        maktx like makt-maktx,
      end of t,
      i type i.
select matnr into table t from mara.
loop at t.
  select single maktx into t-maktx from makt
                      where matnr = t-matnr
                        and spras = sy-langu.
  modify t.
endloop.
describe table t lines i.

Re: doppelt gequirlter code aus dem SQL Lehrbuch S. 258ff

Beitrag von Gast ( / / 0 / 3 ) »
Ulrich hat geschrieben:mindestens eben so schnell
Glaub ich nicht!

Enno

Beitrag von Gast ( / / 0 / 3 ) »
ich auch nicht

Dele

Re: doppelt gequirlter code aus dem SQL Lehrbuch S. 258ff

Beitrag von GERDLA (Specialist / 116 / 0 / 0 ) »
[quote="Ulrich"]mindestens eben so schnell:

Ich habe doch mal diesen Code aus dem SQL Lehrbuch laufen lassen. Bei 70.000 Datensätze braucht dieser Code 45 Sekunden entgegen meinem Innerjoin mit 1 Sekunde.
Ich denke gerade der Select single auf die MAKT ist hier der grosse Hemmschuhe.

:wink: Enjoy It

Re: Perfrormance Tip

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
GERDLA hat geschrieben: ...
SELECT F~MATNR P~MAKTX

INTO (I_TAB-MATNR, I_TAB-MAKTX)
FROM MARA AS F INNER JOIN MAKT AS P
ON F~MATNR = P~MATNR
WHERE F~MATNR in ZMATNR.

APPEND I_TAB.

zähler = zähler + 1.

ENDSELECT.
...
ich plädiere für folgende Variante, da ich SELECT-Schleifen verabscheue... (laufzeitintensiv, debugging-problematisch...)

Code: Alles auswählen.

TYPES:
  BEGIN OF t_material,
    matnr TYPE matnr,
    maktx TYPE maktx,
  END   OF t_material.

DATA:
  gt_material TYPE TABLE OF t_material.

SELECT DISTINCT f~matnr
                p~maktx
    INTO CORRESPONDING FIELDS OF TABLE gt_material
    FROM mara AS f
      INNER JOIN makt AS p
        ON f~matnr = p~matnr
    WHERE f~matnr IN zmatnr
    ORDER BY f~matnr.
Die Anzahl Sätze in der Tabelle sollten sich am schnellsten mit

Code: Alles auswählen.

DESCRIBE TABLE gt_material LINES zaehler.
ermitteln lassen

Beitrag von black_adept (Top Expert / 4102 / 128 / 945 ) »
@Gerdla:

Dir ist schon klar, dass die beiden Codestrecken in deinem Posting am Anfang nicht dasselbe tun, oder :?:
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

unterschiedliches abarbeiten

Beitrag von GERDLA (Specialist / 116 / 0 / 0 ) »
Dir ist schon klar, dass die beiden Codestrecken in deinem Posting am Anfang nicht dasselbe tun, oder?


Hallo black_adept,

was willst du mir genau sagen, stehe wohl
etwas auf der Leitung. Bitte noch kleinen Tipp.

grüsse

gerdla

Re: unterschiedliches abarbeiten

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
GERDLA hat geschrieben:Dir ist schon klar, dass die beiden Codestrecken in deinem Posting am Anfang nicht dasselbe tun, oder?


Hallo black_adept,

was willst du mir genau sagen, stehe wohl
etwas auf der Leitung. Bitte noch kleinen Tipp.

grüsse

gerdla
der geschachtelte SELECT liest alle MATNR und versucht einen Text aus MAKT dazuzulesen, während der JOIN nur die Sätze liefert, wo es zur MATNR auch einen Text in der MAKT gibt.
Spätestens in einem mehrsprachigem System findet der JOIN mehr Daten, weil nicht auf die Sprache (MAKT-SPRAS) geprüft wird.

Korrekterweise sollte der Fall nicht auftreten, dass es zu einem Material nicht mindestens eine Text gibt, aber es kommt gerade beim maschinellen Aufbau einer Materialstamms durchaus vor...
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Gast ( / / 0 / 3 ) »
Hallo Gerdla,

Stefan hat recht - dein erstes Coding findet MARA-Einträge, auch wenn dazu kein MAKT-Eintrag existiert. Durch den INNER JOIN werden jedoch nur die MARA-Einträge mit zugehörigem MAKT-Eintrag selektiert (gleiches Verhalten wie bei der Verwendung eines VIEWs !). Man müsste eigentlich einen LEFT OUTER JOIN verwenden, um dasselbe Ergenis zu erhalten.
Übrigens würde ich auch die Variante von "ereglam" bevorzugen - je nach Bedarf mit INNER oder OUTER JOIN.
Allerdings verwenden wir den ORDER BY nur dann, wenn's unbedingt notwendig ist, weil dadurch die DB belastet wird. Es ist im allgemeinen besser, die interne Tabelle selbst (auf dem Application-Server) zu sortieren. Meines Wissens gibt's dazu auch irgendwo von SAP eine Empfehlung.

mfg dele

Beitrag von black_adept (Top Expert / 4102 / 128 / 945 ) »
Anonymous hat geschrieben:...
Allerdings verwenden wir den ORDER BY nur dann, wenn's unbedingt notwendig ist, weil dadurch die DB belastet wird. Es ist im allgemeinen besser, die interne Tabelle selbst (auf dem Application-Server) zu sortieren. Meines Wissens gibt's dazu auch irgendwo von SAP eine Empfehlung.
Hi dele,

nur mal so aus Neugier.
Wenn die Zieltabelle vom typ "sorted table" ist. Macht ihr einen Select ohne order in eine temporäre Zwischentabelle, sort und dann move in die "sorted table" oder direkt in die "sorted table"?

Und wo steht denn die SAP-Empfehlung? Ich mach das immer so nach Gefühl aber wenn SAP da tolle Ideen hat was am Besten ist würd ich gern dieses Wissen mitnehmen.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
black_adept hat geschrieben:
Anonymous hat geschrieben:...
Allerdings verwenden wir den ORDER BY nur dann, wenn's unbedingt notwendig ist, weil dadurch die DB belastet wird. Es ist im allgemeinen besser, die interne Tabelle selbst (auf dem Application-Server) zu sortieren. Meines Wissens gibt's dazu auch irgendwo von SAP eine Empfehlung.
Hi dele,

nur mal so aus Neugier.
Wenn die Zieltabelle vom typ "sorted table" ist. Macht ihr einen Select ohne order in eine temporäre Zwischentabelle, sort und dann move in die "sorted table" oder direkt in die "sorted table"?

Und wo steht denn die SAP-Empfehlung? Ich mach das immer so nach Gefühl aber wenn SAP da tolle Ideen hat was am Besten ist würd ich gern dieses Wissen mitnehmen.
Ein Einfügen per SELECT... INTO TABLE führt automatisch zum korrekten Aufbau der Schlüssel. Weiß ich noch von meiner Zeit als Externer bei SAP. ;)
Wie das bei Verwendung von APPENDING TABLE ist, bin ich mir zwar nicht mehr sicher, müßte aber eigentlich analog laufen.
Ein ORDER BY ist dabei, soweit ich weiß, nicht notwendig.

@dele
nach meinem Kenntnisstand ist ein ORDER BY auf der Datenbank besser als ein SORT im ABAP, da die Datenbank ohnehin die Liste am Aufbauen ist. Hängt aber wahrscheinlich auch wieder von der Ergebnismenge ab.
(will mich hier aber jetzt nicht zu weit aus dem Fenster lehnen)

Re: unterschiedliches abarbeiten

Beitrag von GERDLA (Specialist / 116 / 0 / 0 ) »
[quote="ereglam"][quote="GERDLA"]Dir ist schon klar, dass die beiden Codestrecken in deinem Posting am Anfang nicht dasselbe tun, oder?


AAH das meint ihr. Ja das war mir bewusst, dass der Innerjoin nur die übereinstimmenden Sätze liest und ich die Sprachabhängigkeiten vernachlässigt hatte.

Die Idee war auch nur zu zeigen, was man an Performance gewinnen kann. Aber ihr habt Recht, bei Beispielen sollte man auch möglichst korrekt arbeiten.

:wink:

Bis denn


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.