Golgappa.net | Golgappa.org | BagIndia.net | BodyIndia.Com | CabIndia.net | CarsBikes.net | CarsBikes.org | CashIndia.net | ConsumerIndia.net | CookingIndia.net | DataIndia.net | DealIndia.net | EmailIndia.net | FirstTablet.com | FirstTourist.com | ForsaleIndia.net | IndiaBody.Com | IndiaCab.net | IndiaCash.net | IndiaModel.net | KidForum.net | OfficeIndia.net | PaysIndia.com | RestaurantIndia.net | RestaurantsIndia.net | SaleForum.net | SellForum.net | SoldIndia.com | StarIndia.net | TomatoCab.com | TomatoCabs.com | TownIndia.com
Interested to Buy Any Domain ? << Click Here >> for more details...

In ABAP What is the Use of "FOR ALL ENTRIES" Clause & when
it is being used. And what it really does?

Answer Posted / arasumani

All abap programers and most of the dba's that support abap
programmers are familiar with the abap clause "for all
entries". Most of the web pages I visited recently, discuss
3 major drawbacks of the "for all entries" clause:

1. duplicate rows are automatically removed
2. if the itab used in the clause is empty , all the rows in
the source table will be selected .
3. performance degradation when using the clause on big tables.

In this post I'd like to shed some light on the third issue.
Specifically i'll discuss the use of the "for all entries"
clause as a means to join tables in the abap code instead of
in db2.

Say for example you have the following abap code:
Select * from mara
For all entries in itab
Where matnr = itab-matnr.

If the actual source of the material list (represented here
by itab) is actually another database table, like:
select matnr from mseg
into corresponding fields of table itab
where ….

Then you could have used one sql statement that joins both
tables.
Select t1.*
From mara t1, mseg t2
Where t1.matnr = t2.matnr
And T2…..

So what are the drawbacks of using the "for all entires"
instead of a join ?

At run time , in order to fulfill the "for all entries "
request, the abap engine will generate several sql
statements (for detailed information on this refer to note
48230). Regardless of which method the engine uses (union
all, "or" or "in" predicates) If the itab is bigger then a
few records, the abap engine will break the itab into parts,
and rerun an sql statement several times in a loop. This
rerun of the same sql statement , each time with different
host values, is a source of resource waste because it may
lead to re-reading of data pages.

returing to the above example , lets say that our itab
contains 500 records and that the abap engine will be forced
to run the following sql statement 50 times with a list of
10 values each time.
Select * from mara
Where matnr in ( ...)

Db2 will be able to perform this sql statement cheaply all
50 times, using one of sap standard indexes that contain the
matnr column. But in actuality, if you consider the wider
picture (all 50 executions of the statement), you will see
that some of the data pages, especially the root and
middle-tire index pages have been re-read each execution.

Even though db2 has mechanisms like buffer pools and
sequential detection to try to minimize the i/o cost of such
cases, those mechanisms can only minimize the actual i/o
operations , not the cpu cost of re-reading them once they
are in memory. Had you coded the join, db2 would have known
that you actually need 500 rows from mara, it would have
been able to use other access methods, and potentially
consume less getpages i/o and cpu.

In other words , when you use the "for all entries " clause
instead of coding a join , you are depriving the database of
important information needed to select the best access path
for your application. Moreover, you are depriving your DBA
of the same vital information. When the DBA monitors & tunes
the system, he (or she) is less likely to recognize this
kind of resource waste. The DBA will see a simple statement
that uses an index , he is less likely to realize that this
statement is executed in a loop unnecessarily.

In conclusion I suggest to "think twice" before using the
"for all entries" clause and to evaluate the use of database
views as a means to:
a. simplify sql
b. simplify abap code
c. get around open sql limitations.

Is This Answer Correct ?    21 Yes 10 No



Post New Answer       View All Answers


Please Help Members By Posting Answers For Below Questions

What is a table pool? : abap data dictionary

1071


Difference between Field groups and internal tables?

1063


What is the function module to popup contents in the internal table?

1027


what is the difference between Blocked ALV and interactive ALV?

2369


dear friends, do you know how to configure web dynpro and adobe into ECC6.0 IDES?

2948


How to insert a line into abap internal tables?

1073


Explain about drill down report?

9201


What will be your approach towards optimizing legacy code? Will you suggest change in technology? Does OO ABAP bring any performance benefits? How will you deal with queries in a loop? How will you optimize nested loops?

1367


What are the table controls in bdc ? What is the difference between bdc and lsmw ?what is the difference between bdc and rfc ? : abap bdc

1184


What is read line in abap?

1122


How do you control printer functions from sapscript?

1310


What are the page windows? How many main windows will be there in a page window?

967


In a loop of an internal table, what is the use of at first & at last statements?

1967


Under Data Transfer Portion of ABAP, what do you mean by DX Project

2309


How to debug a script in abap?

1128