Aber ich find's gut, dass da so eine Diskussion draus entstanden ist. Verwirrt mich persönlich zwar im Moment noch alles ein wenig, aber ich glaub ihr habt ein bissel Spaß
Moin Andrea,
es existiert keine einfache Regel nach der man bei DB-Zugriffen arbeiten kann, sondern viele. Man muss verstehen, was beim Zugriff passiert und wie die Daten(-konstellationen) aussehen. Dazu sind die Performancehinweise in der Online-Hilfe unter ABAP-Programmierung->DB-Zugriffe->Open-SQL->Performance-Hinweise sehr gut zu gebrauchen.
Du wirst dabei feststellen, dass sich Hinweise widersprechen. Bspw. die DB (den Flaschenhals) entlasten, indem keine Aggregatfunktionen etc. verwendet werden, andererseits sollte der Netzwerktraffic gering sein, dazu muss man u.U. Aggregatfunktionen nutzen, was wiederum die DB belastet etc.pp..
Ich denke lediglich eine geschachtelte Select-Schleife kann man grundsätzlich als schlecht betrachten, aber ob man nun einen Join oder For-all-Entries oder vielleicht eine Sub-Query verwendet hängt von der jeweiligen Situation ab.
Grundsätzlich sollte man aber die Datenbank so weit es geht entlasten, da man auch an die Gesamtsystemperformance denken sollte. Es kann somit Sinn machen, eine um 1 Prozent langsamere Lösung zu wählen, wenn man dadurch die Verarbeitung auf den (skalierbaren) Applikationsserver verlagern kann.
Günstig ist es, wenn man in einem Testprogramm den Zugriff (oder mehrere Varianten) im Testsystem mit produktionsnahen Daten testen kann.
Meistens exisitieren auch mehrere Möglichkeiten um zu den gewünschten Daten zu gelangen. Da muss man sich auch sehr gut überlegen, über welche Tabellen man einsteigt.
Ach ja, teilweise werden auch (Gruppen-)Bezeichnungen bei der Datenselektion gelesen, die später in einer Liste nur beim Gruppenwechsel ausgegeben werden. In so einem Fall bietet sich ein Select-Single beim AT NEW an. Oder man liest Customizingtabellen, komplett ein und greift bei der Listausgabe auf sie zu. Oder, oder, oder.
...
oder man selektiert direkt Standard-Views
(z.B. VB_DEBI für kna1, knb1, und bsid)
...
oder man erstellt selbst DB-views für wiederkehrende Aufgabenstellungen...