2008 Aug 11 12:10 PM
Hi friends,
i want to use one query in that i have to use neseted selects.
can any one tel me example with considering performane also.
regards,
madhu.
Hi,
Nested select can be avoided by using two internal table and merging those two internal tables into third itab.
ex.
select field into table itab1 from ekko
where ebeln in s_ebeln.
select fields into table itab2 from ekpo
for all entries in itab1 where
ebeln = itab1-ebeln.
loop at itab1 into wa_itab1.
move-corresponding wa-tab1 to wa-final.
read table itab2 with key ebeln = it_header binary search transporting no fields.
loop at itab2 into wa_itab2 from sy-tabix.
if itab2-ebeln <> itab1-ebeln.
exit.
endif.
move-corresponding wa-tab2 to wa-final.
append wa-final to itab_final .
endloop.
endloop.
This will avoid nested select and processing will be fast according to performance tuning.
Edited by: Shobhit Bansal on Aug 21, 2008 1:05 PM
2008 Aug 11 12:14 PM
Hi madhu,
SELECT tabname
INTO ls_dd02l
FROM dd02l
WHERE tabname LIKE c_feld
AND buffered IS NOT NULL.
SELECT tabname fieldname keyflag position
INTO CORRESPONDING FIELDS OF ls_dd03l
FROM dd03l
WHERE tabname = ls_dd02l-tabname
AND fieldname IN ('MANDT', 'CLIENT', 'CLNT')
AND keyflag = 'X'.
IF ( sy-subrc EQ 0 ).
wa-tabname = ls_dd03l-tabname.
wa-fieldname = ls_dd03l-fieldname.
wa-keyflag = ls_dd03l-keyflag.
wa-position = ls_dd03l-position.
APPEND wa TO itab.
ENDIF.
ENDSELECT.
ENDSELECT.
There are no practical limits to nested SELECTs, but as other repliers have already pointed out they quickly become a performance hog. I have stopped using them for years, and when I teach ABAP performance classes I also quote them as one of the top "don'ts". With nested selects, the number of calls to the DBMS can easily become enormous, putting the database server under stress.
A good alternative - the one I favour most myself - is to use SELECT INTO TABLE for the"outer" select, followed by appropriate SELECT FOR ALL ENTRIES statements to handle the inner levels.
ABAP joins are another alternative. When properly written, a join will be faster than a nested select. The problem is however that very often joins are not properly written. SELECT statements should always respect the KISS principle (keep it simple, stupid) and with a join it is very easy to violate that rule. A join over 2 tables should probably be OK, but with 3 or more tables you want to be very careful. If you really want to code a complex join, I recommend that you also code the same logic with different means (INTO TABLE/FOR ALL ENTRIES or even nested selects) and then compare that with the join.
regards,
Jayan.
2008 Aug 11 12:15 PM
Hi,
Instead of Nested selects use like this
SELECT * FROM SFLIGHT AS F INTO SFLIGHT_WA
WHERE SEATSOCC < F~SEATSMAX
AND EXISTS ( SELECT * FROM SPFLI
WHERE CARRID = F~CARRID
AND CONNID = F~CONNID
AND CITYFROM = 'FRANKFURT'
AND CITYTO = 'NEW YORK' )
AND FLDATE BETWEEN '19990101' AND '19990331'.
ENDSELECT.
Go to SE30 and glick on Tips and Tricks
Look at SQL interface.
Regards,
Krishna
2008 Aug 11 12:19 PM
Hi
Instead of using NESTED SQL statements use FOR ALL ENTRIES as far as performance is concerned.
Hope it helps.
Murthy
2008 Aug 11 2:34 PM
Nested selects should be avoided,
+ If all tables are not buffered. If they are buffered, then the nested selects are the best solution!
+ Joins should be the best alternative. But the performance of the joins should be checked (as everything) by the SQL trace. And maybe youe first version is not optimal.
+ For all entries can be an option, I would actually only recommend it, if the join does not work.
+ the above mentioned subselect is a very special option, which can not always be used. But if it is applicable, then it can be the best solution.
Siegfried
2008 Aug 21 12:04 PM
Hi,
Nested select can be avoided by using two internal table and merging those two internal tables into third itab.
ex.
select field into table itab1 from ekko
where ebeln in s_ebeln.
select fields into table itab2 from ekpo
for all entries in itab1 where
ebeln = itab1-ebeln.
loop at itab1 into wa_itab1.
move-corresponding wa-tab1 to wa-final.
read table itab2 with key ebeln = it_header binary search transporting no fields.
loop at itab2 into wa_itab2 from sy-tabix.
if itab2-ebeln <> itab1-ebeln.
exit.
endif.
move-corresponding wa-tab2 to wa-final.
append wa-final to itab_final .
endloop.
endloop.
This will avoid nested select and processing will be fast according to performance tuning.
Edited by: Shobhit Bansal on Aug 21, 2008 1:05 PM
2008 Aug 21 12:13 PM
| User | Count |
|---|---|
| 6 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |