SELECT Performance erhöhen

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

SELECT Performance erhöhen

Beitrag von ostpower (ForumUser / 48 / 1 / 0 ) »
Hallo zusammen,

ich erstelle eine Liste, welche aus zwei Tabellen zusammengesetzt ist. Zur Zeit mache ich dies mit zwei Select-Statements und einem anschließenden Loop mit Key-Abgleich. Ich denke es wäre performanter wenn ich die beiden Selects per Join zusammenführe. Aber ich weiß nicht so recht wie. Vielleicht könnt ihr mir helfen. Hier mein Code:

Code: Alles auswählen.

SELECT *
  INTO TABLE i_Tab1
  FROM Tab1
  WHERE anfang LE sy-datum AND
        ende GE sy-datum AND
        ( wert NE 'A' AND
          wert NE 'B' AND
          wert NE 'C' AND
          wert NE 'D' AND
          wert NE 'E' AND
          wert NE 'F' AND
          wert NE ' ' ).

  SELECT *
    INTO TABLE i_Tab2
    FROM Tab2
    WHERE anfang LE sy-datum AND
          ende GE sy-datum AND
          ( zahlwert EQ '0' OR
            zahlwert EQ '5' OR
            zahlwert EQ '0' OR
            zahlwert EQ '0' ).

LOOP AT i_Tab1 INTO line_Tab1.

  LOOP AT i_Tab2 INTO line_Tab2 WHERE ident_nr eq line_Tab1-ident_nr.
     * Ausgabe der Liste
  ENDLOOP.

ENDLOOP.


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


Re: SELECT Performance erhöhen

Beitrag von Ferum (ForumUser / 36 / 3 / 6 ) »
Hi,

ein Join muss nicht zwangsweise performanter sein.
Hängt zum einen von der Datenbank ab, die man einsetzt und von den Feldern über die man joint.
Mann sollte wenn möglich nur für über den Key joinen.

Die Variante mit vorher einzeln selektieren und später im Loop verarbeiten, muss nicht schlechter sein.

Sonst gibt es auch noch Hinweise zur performanten Entwicklung:
185530, 187906 und 191492

Gruß,

Re: SELECT Performance erhöhen

Beitrag von a-dead-trousers (Top Expert / 4396 / 223 / 1182 ) »
hi!

Wenn die Felder der Join-Bedingung (ON...) einen Index besitzen oder noch besser den PRIMARY KEY umfassen, sollte ein Join performanter sein als die Einzelselektion. Und wenn durch den Join eine unnötig Selektion von Daten verhindert wird (z.B. 1.000 statt 10.000 Datensätze) ist ein Join (fast) immer die bessere Wahl.

Und wie auch schon Ferum erwähnt hat, gibt es zu dem Thema noch viel mehr Informationen und sogar eine eigene Schulung seitens SAP (BC 490). Vielleicht kannst du ja die dazugehörigen Unterlagen irgendwo bekommen. Sind wirklich zu empfehlen. Hab sehr viel dadurch gelernt.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: SELECT Performance erhöhen

Beitrag von ostpower (ForumUser / 48 / 1 / 0 ) »
Ja das werde ich mir mal anschauen. Aber könnt ihr mir anhand des Quellcodes zeigen, wie das mit meinem Beispiel aussehen müsste?

Und wie kann ich mir die Hinweise anschauen? Ich habe keinen SAP Markteplace Account.

Re: SELECT Performance erhöhen

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
a-dead-trousers hat geschrieben:Wenn die Felder der Join-Bedingung (ON...) einen Index besitzen oder noch besser den PRIMARY KEY umfassen, sollte ein Join performanter sein als die Einzelselektion.
Jein, ein JOIN umgeht den Datenbankpuffer.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: SELECT Performance erhöhen

Beitrag von Daniel123 (ForumUser / 8 / 1 / 1 ) »
moin moin,

grob sollte das so laufen:

Code: Alles auswählen.

SELECT * into CORRESPONDING FIELDS OF TABLE Tab2
  FROM Tab1 as t1
  join Tab2 as t2  
  on t1~ident_nr eq t2~ident_nr
  WHERE t1~anfang LE sy-datum AND
        t1~ende GE sy-datum AND
        ( t1~wert NE 'A' AND
          t1~wert NE 'B' AND
          t1~wert NE 'C' AND
          t1~wert NE 'D' AND
          t1~wert NE 'E' AND
          t1~wert NE 'F' AND
          t1~wert NE ' ' )
        AND (
          t2~zahlwert EQ '0' OR
          t2~zahlwert EQ '5' OR
           ).
Die SAP Hilfe erklärt die Joins recht ordentlich wie ich finde. Teste das mal. Fange ggf erstmal mit nur einer oder zwei Bedingungen im Where an.

Re: SELECT Performance erhöhen

Beitrag von a-dead-trousers (Top Expert / 4396 / 223 / 1182 ) »
hi!
ralf.wenzel hat geschrieben:Jein, ein JOIN umgeht den Datenbankpuffer.
Schon klar. Aber hin und wieder kann es sein, dass durch zwei Selects einfach soviel "Mist" mitselektiert wird, dass sich der Vorteil durch den Datenbankpuffer (oder sogar Applikationsserver-Puffer) soweit relativiert und ein Join daher besser ist.

Wie gesagt, dass muss man sich wirklich je Anwendungsfall anschauen.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: SELECT Performance erhöhen

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Darum schreibe ich "jein" statt "nein" ;)
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Seite 1 von 1

Vergleichbare Themen

4
Antw.
9346
Views
Performance: SELECT UP TO 1 ROWS vs. SELECT SINGLE
von roman1983 » 04.09.2008 14:29 • Verfasst in ABAP® für Anfänger
4
Antw.
417
Views
Performance select
von A6272 » 19.09.2022 10:44 • Verfasst in ABAP® für Anfänger
3
Antw.
2214
Views
Performance Select
von derMartin » 14.08.2008 13:58 • Verfasst in ABAP® für Anfänger
18
Antw.
6926
Views
Performance-Problem bei SELECT
von Charadin » 22.10.2007 08:10 • Verfasst in ABAP® Core
1
Antw.
1946
Views
FuBa Mahnstufe erhöhen
von kaufmann123 » 02.08.2018 11:44 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 58 Minuten von black_adept gelöst 23 / 3449
User Exit EXIT_RQCPRM10_001
vor einer Stunde von a-dead-trousers 2 / 137
Trennen Strasse und Hausnummer
vor 7 Stunden von payten 13 / 10431
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1193

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

Dialog-Container mit Toolbar/Status
vor 58 Minuten von black_adept gelöst 23 / 3449
User Exit EXIT_RQCPRM10_001
vor einer Stunde von a-dead-trousers 2 / 137
Trennen Strasse und Hausnummer
vor 7 Stunden von payten 13 / 10431
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1193

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2750
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9329