Additional Blogs by SAP
cancel
Showing results for 
Search instead for 
Did you mean: 
former_member182779
Active Contributor
0 Kudos
Currently, I'm working on a Performance project. As you may know, you can get performance down by implementing or using an Index, completing a WHERE statement or by deleting duplicated SELECT's. Sometimes, you need to JOIN tables, so you need to know which fields must be used. For this, I have created a small performance tool to help me in my everyday work. This tool, perform three tasks...   **  List all indices of a given table. **  List all the tables and views where two given fields are repeated. First, the source code...Then some pictures...   *&--------------------------------------------------- * *& Report  ZPERFORMANCE_TOOL                          * *&--------------------------------------------------- * REPORT  ZPERFORMANCE_TOOL.  *=====================================================* * TABLES                                              * *=====================================================* TABLES: DD03L.  *=====================================================* * TYPES                                               * *=====================================================* TYPES: BEGIN OF TY_REPEATED,        FIELDNAME TYPE DD03P-FIELDNAME,        DDTEXT TYPE DD03P-DDTEXT,        END OF TY_REPEATED.  TYPES: BEGIN OF TY_INDEX,        SQLTAB TYPE DD17S-SQLTAB,        INDEXNAME TYPE DD17S-INDEXNAME,        FIELDNAME TYPE DD17S-FIELDNAME,        DDTEXT TYPE DD12T-DDTEXT,        END OF TY_INDEX.  TYPES: BEGIN OF TY_DD03L,        TABNAME TYPE DD03L-TABNAME,        FIELDNAME TYPE DD03L-FIELDNAME,        END OF TY_DD03L.  *=====================================================* * INTERNAL TABLES                                     * *=====================================================* DATA: DD03P_TAB TYPE STANDARD TABLE OF DD03P,       DD03P_TABLE1 TYPE STANDARD TABLE OF DD03P,       DD03P_TABLE2 TYPE STANDARD TABLE OF DD03P,       T_INDEX TYPE STANDARD TABLE OF TY_INDEX,       T_REPEATED TYPE STANDARD TABLE OF TY_REPEATED,       T_DD03L TYPE STANDARD TABLE OF DD03L,       T_DD03L_AUX TYPE STANDARD TABLE OF DD03L.  *=====================================================* * VARIABLES                                           * *=====================================================* DATA: LONG_1 TYPE I,       LONG_2 TYPE I,       W_TITLE TYPE STRING,       W_INDEXNAME TYPE DD17S-INDEXNAME,       FIELD1(30).  *=====================================================* * FIELD-SYMBOLS                                       * *=====================================================* FIELD-SYMBOLS:  LIKE LINE OF T_DD03L.  *=====================================================* * SELECTION-SCREEN                                    * *=====================================================* SELECTION-SCREEN BEGIN OF BLOCK GROUP WITH FRAME TITLE TEXT-001. PARAMETERS: REP_1 RADIOBUTTON GROUP RND USER-COMMAND TEST DEFAULT 'X',             REP_2 RADIOBUTTON GROUP RND,             REP_3 RADIOBUTTON GROUP RND. SELECTION-SCREEN END OF BLOCK GROUP.  SELECTION-SCREEN BEGIN OF BLOCK REP_1 WITH FRAME. PARAMETERS:            P_TAB_1 TYPE DD17S-SQLTAB MODIF ID SC1,            P_TAB_2 TYPE DD17S-SQLTAB MODIF ID SC1. SELECTION-SCREEN END OF BLOCK REP_1.  SELECTION-SCREEN BEGIN OF BLOCK REP_2 WITH FRAME. PARAMETERS:            P_TABNAM TYPE DD17S-SQLTAB MODIF ID SC2. SELECTION-SCREEN END OF BLOCK REP_2.  SELECTION-SCREEN BEGIN OF BLOCK REP_3 WITH FRAME. PARAMETERS:                P_FIELD1 TYPE DD03L-FIELDNAME MODIF ID SC3,                P_FIELD2 TYPE DD03L-FIELDNAME MODIF ID SC3. SELECTION-SCREEN END OF BLOCK REP_3.  *=====================================================* * AT SELECTION-SCREEN                                 * *=====================================================* AT SELECTION-SCREEN OUTPUT.   LOOP AT SCREEN.     IF REP_1 EQ 'X'.       IF SCREEN-GROUP1 = 'SC2'.         SCREEN-ACTIVE = '0'.         MODIFY SCREEN.         CONTINUE.       ENDIF.       IF SCREEN-GROUP1 = 'SC3'.         SCREEN-ACTIVE = '0'.         MODIFY SCREEN.         CONTINUE.       ENDIF.     ELSEIF REP_2 EQ 'X'.       IF SCREEN-GROUP1 = 'SC1'.         SCREEN-ACTIVE = '0'.         MODIFY SCREEN.         CONTINUE.       ENDIF.       IF SCREEN-GROUP1 = 'SC3'.         SCREEN-ACTIVE = '0'.         MODIFY SCREEN.         CONTINUE.       ENDIF.     ELSEIF REP_3 EQ 'X'.       IF SCREEN-GROUP1 = 'SC1'.         SCREEN-ACTIVE = '0'.         MODIFY SCREEN.         CONTINUE.       ENDIF.       IF SCREEN-GROUP1 = 'SC2'.         SCREEN-ACTIVE = '0'.         MODIFY SCREEN.         CONTINUE.       ENDIF.     ENDIF.   ENDLOOP.  *=====================================================* * START-OF-SELECTION                                  * *=====================================================* START-OF-SELECTION.    IF REP_1 EQ 'X'.     CONCATENATE P_TAB_1 P_TAB_2 INTO     W_TITLE SEPARATED BY '-'.      SY-TITLE = W_TITLE.      CALL FUNCTION 'DDIF_TABL_GET'       EXPORTING         NAME          = P_TAB_1         STATE         = 'A'         LANGU         = SY-LANGU       TABLES         DD03P_TAB     = DD03P_TABLE1       EXCEPTIONS         ILLEGAL_INPUT = 1         OTHERS        = 2.      DELETE DD03P_TABLE1 WHERE ROLLNAME EQ SPACE.      CALL FUNCTION 'DDIF_TABL_GET'       EXPORTING         NAME          = P_TAB_2         STATE         = 'A'         LANGU         = SY-LANGU       TABLES         DD03P_TAB     = DD03P_TABLE2       EXCEPTIONS         ILLEGAL_INPUT = 1         OTHERS        = 2.      DELETE DD03P_TABLE2 WHERE ROLLNAME EQ SPACE.      DESCRIBE TABLE DD03P_TABLE1 LINES LONG_1.     DESCRIBE TABLE DD03P_TABLE2 LINES LONG_2.      IF LONG_1 GT LONG_2.       LOOP AT DD03P_TABLE1 ASSIGNING -DDTEXT.     ENDLOOP.   ELSEIF REP_2 EQ 'X'.      SELECT DD17S~SQLTAB DD17S~INDEXNAME FIELDNAME DDTEXT     INTO TABLE T_INDEX     FROM DD17S INNER JOIN DD12T     ON DD17S~SQLTAB EQ DD12T~SQLTAB     AND DD17S~INDEXNAME EQ DD12T~INDEXNAME     WHERE DD17S~SQLTAB EQ P_TABNAM       AND DDLANGUAGE EQ SY-LANGU.      CALL FUNCTION 'DDIF_TABL_GET'       EXPORTING         NAME          = P_TABNAM         STATE         = 'A'         LANGU         = SY-LANGU       TABLES         DD03P_TAB     = DD03P_TAB       EXCEPTIONS         ILLEGAL_INPUT = 1         OTHERS        = 2.      SY-TITLE = P_TABNAM.      LOOP AT T_INDEX ASSIGNING -DDTEXT.       ENDIF.     ENDLOOP.   ELSE.     SELECT DD03L~TABNAME FIELDNAME     INTO TABLE T_DD03L     FROM ( DD03L INNER JOIN DD02L     ON DD03L~TABNAME EQ DD02L~TABNAME )     WHERE TABCLASS IN ('TRANSP','VIEW')       AND FIELDNAME EQ P_FIELD1        OR FIELDNAME EQ P_FIELD2.      SORT T_DD03L.      LOOP AT T_DD03L ASSIGNING -TABNAME.     ENDLOOP.   ENDIF.  *=====================================================* * AT LINE-SELECTION                                   * *=====================================================* AT LINE-SELECTION.    IF REP_3 EQ 'X'.     SET PARAMETER ID 'DTB' FIELD SY-LISEL+0(15).      CALL TRANSACTION 'SE11' AND SKIP FIRST SCREEN.   ENDIF.     Time for the pictures...    
5 Comments