Laufzeit optimieren!

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

Laufzeit optimieren!

Beitrag von made (ForumUser / 49 / 0 / 0 ) »
Hallo!
Ich habe ein riesiges Problem.....mein Programm ist zwar fehlerfrei, aber dafür hat es auf einem bestimmten system eine zu lange laufzeit. Ich hab auch die übeltäterstelle gefunden. leider bekomme ich auch nie ein ergebnis, weil nach 50 minuten abgebrochen wird.
wie kann ich diesen teil von der laufzeit her verbessern??? :?

Code: Alles auswählen.

   SELECT COUNT( DISTINCT matnr )
        FROM marc
        INTO gs_stklivw-matverw5
        WHERE ynfg = gv_matnr AND
              werks = '0150'.
grüße made

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Made,

hast Du einen Index auf das Feld MARC-YNFG gesetzt? Wenn nicht, muss dei Datenbank bei jeder Abfrage einen FULL TABLE SCAN durchführen, also jeden Satz einzeln lesen.
Weiterhin ist der die COUNT-Klausel im SELECT nicht für alle Datenbank laufzeitmßig günstig implementiert. Möglicherweise könntest Du den Zugriff beschleunigen, wenn Du statt dessen nur die DISTINCTen MATNR in eine Tabelle schreiben läßt und sie im Programm zählst. SY-DBCNT könnte dann aber auch das Ergebnis bereits enthalten.

Probier doch bitte mal nachfolgenden Code:

Code: Alles auswählen.

   SELECT COUNT( matnr ) 
        FROM mara
        INTO gs_stklivw-matverw5 
        WHERE EXISTS (
          SELECT matnr
                 FROM marc
                 WHERE ynfg = gv_matnr AND 
                       werks = '0150' ).
Gruß
Ereglam


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

Beitrag von made (ForumUser / 49 / 0 / 0 ) »
Der Code geht leider nicht. Er will ein Distinct vor der matnr haben und wenn ich das reinschreibe,
dann bekomme ich eine ganz falsche anzahl raus.
Wie geht das mit dem Index?
Was muss ich dann wie aufrufen?
Gruß Made

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Hallo made,

als Ergänzung zu ereglam's Beitrag:
Manchmal ist es günstiger sich die benötigten Daten in eine interne Tabelle zu Laden - auch wenn man sie ggf. nur einmal benötigt !. Dies gilt immer dann, wenn man auf eine Tabelle sehr häufig mit Select SINGLE oder eben COUNT / DISTINCT usw. zugreift. Die DB ist wesentlich schneller, wenn sie die Daten sozusagen in einem Rutsch lesen kann. Und die Verarbeitung in internen Tabellen ist viel flexibler. Natürlich hängt das auch vom Datenvolumen ab. Aber wenn man sich wirklich nur auf die benötigten Felder konzentriert, dann haut das meistens hin.

mfg dele

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Made,

bzgl. Index:
Dazu muss man in der SE11 einen kundeneigenen Index anlegen, der in etwa wie folgend aufgebaut ist:

Code: Alles auswählen.

MANDT
YNFG
etc.
Es bewirkt, dass die Datenbank sich eine Indextabelle anlegt und dann für jedes YNFG sich die Datensätze der Haupttabelle merkt. Damit ist ein Zugriff wesentlich schneller, weil nicht jeder Datensatz einzeln durchsucht werden muss.

Probier es jetzt noch einmal:

Code: Alles auswählen.

   SELECT COUNT( DISTINCT matnr ) 
        FROM mara 
        INTO gs_stklivw-matverw5 
        WHERE EXISTS ( 
          SELECT matnr 
                 FROM marc 
                 WHERE matnr = mara~matnr "weitere Bedingung
                 AND   ynfg  = gv_matnr 
                 AND   werks = '0150' ). 
Nachtrag: das DISTINCT ist auf jeden Fall notwendig... :oops:
Gruß
Ereglam


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

Beitrag von Gast ( / / 0 / 3 ) »
Jetz gehts.
Habe aber jetzt doch die Variante mit dem Index gewählt.

Vielen Dank! :D

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Soweit ich mich erinnere, ist dieses Feld YFNG für Euch recht wichtig. In sofern ist die Definition des Indexes bei Euch ohnehin anzuraten gewesen.
Gruß
Ereglam


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

Seite 1 von 1

Vergleichbare Themen

8
Antw.
2346
Views
SALV einzelne Spaltenbreite optimieren
von Murdock » 17.02.2022 08:56 • Verfasst in ABAP Objects®
5
Antw.
1291
Views
Geschwindigkeit Optimieren bei Loop und Zuweisung
von autohandel7 » 15.01.2019 10:24 • Verfasst in ABAP® für Anfänger
1
Antw.
1331
Views
sALV einzelne Spalten unabhängig von einander optimieren
von Dominic » 20.09.2018 10:32 • Verfasst in ABAP® Core
1
Antw.
1245
Views
Laufzeit
von christof » 23.03.2016 13:25 • Verfasst in ABAP® für Anfänger
2
Antw.
1563
Views
Frage zur Laufzeit
von Achimbsp » 26.10.2005 18:09 • Verfasst in ABAP® Core

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Get und Set
vor 37 Minuten von tar 18 / 3200
Wissensdatenbank
vor einer Stunde von ewx 15 / 1905
Neue Themen als SAP Entwickler
vor 19 Stunden von ralf.wenzel 138 / 18642

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.

Aktuelle Forenbeiträge

Get und Set
vor 37 Minuten von tar 18 / 3200
Wissensdatenbank
vor einer Stunde von ewx 15 / 1905
Neue Themen als SAP Entwickler
vor 19 Stunden von ralf.wenzel 138 / 18642