理论教育 ABAP与数据库的优化技巧

ABAP与数据库的优化技巧

时间:2023-06-12 理论教育 版权反馈
【摘要】:■通过事务SE80→Repository Information System→ABAP字典→数据库表格中,对某个字段进行查询。通常情况下报表程序中输出的列表数据来自数据库,在ABAP程序中,可使用Open SQL或者Native SQL读取这些数据库表。SAP中提供多种类型的逻辑数据库,开发人员也可自行定义数据源。

ABAP与数据库的优化技巧

1.ABAP数据表的主索引是什么?索引的好处与坏处有哪些?建索引的注意事项有哪些?

数据表的主键即是表的主索引;好的索引能加快数据读取的速度但会增加更新数据库表的时间;建立次级索引时应尽量选取那些查询条件经常使用到的字段。

2.ABAP透明表有哪几种数据类(Data Class)?对数据的存储有什么影响?

数据类主要分为以下三类:

■主数据类:经常读取,很少修改的数据。

■业务数据类:经常更新的数据。

■组织数据类:系统初始化时存在的数据,也很少修改。

数据类决定了数据实际存放的物理区域。

3.SAP中有几种表,他们的区别是什么?

Transparent table(透明表),Pooled table(共享表)和Cluster table(簇表)。透明表是和DB层的物理表(Physical Table)对应的,后两者则是不对应到DB表的。比如TBSL就是一个共享表,在DB层找不到此表。然后多个簇表或共享表组成一个表簇(table cluster)或表池(Table Pool),表簇和表池是DB层的一个物理表。

4.什么是簇表(cluster table)?举出知道的簇表。

簇表是逻辑上有关联的几个表,在定义的时候分配给一个表簇,如Bseg。

5.找数据库表有哪些常用的方法?

■单击画面上需要查找的字段,单击<F1>键,在弹出画面中的技术信息中查找。

■通过ST05进行数据库操作的跟踪,对于在前台界面进行数据的新增或更新,在数据库中都会有所体现。

■通过事务SE80→Repository Information System→ABAP字典→数据库表格中,对某个字段进行查询。

6.如何提高程序效率

■使用OPEN SQL时注意以下原则:

●尽可能减少满足条件的数据条目数量。

●减少数据的传输量,以减少网络流量。

●减少访问的数据库表量。

●减少查询难度,可以通过整理选择标准来实现。

●减少数据库负载。

■不要在LOOP中访问数据库,尽量将数据预先提取到内表中,然后再通过语句READ TABLE WITH KEY...BINARY SEARCH将内表进行数据整合。

■SELECT语句尽量提取需要的字段,避免使用SELECT*,对于不需要的字段避免抽取。

SELECT语句WHERE条件,应该先将主键相关条件放在前面,然后按照比较符=<><>LIKE IN的顺序排列WHERE条件。

■读取内表使用二分查找方式BINARY SEARCH,读取TABLE之前使用SORT TABLE BY对内表进行排序。

■尽量使用Select(max,min,sum,avg)、select single、for all enteris、append和collect语句。

■避免使用select distinct,在抽取数据到内表前先sort,后用DELETE ADJACENT DUPLICATES语句来消除重复行,再delete。

■不要使用SELECT...ENDSELECT语句。

■用SORT代替SELECT...ORDER BY。(www.daowen.com)

■尽量多用WHERE语句进行条件抽取。

7.表内联(外联)限制条件有哪些?

LEFT OUTER JOIN限制条件:

■在ON附加项中,只能使用“=”操作符,且必须至少有一个条件是对主选择表和结合表中的字段进行比较。

■不能在WHERE子句中对结合数据表中的字段进行条件限定,该语句中的OUTER关键字可以省略。

INNER JOIN限制条件:

■不同逻辑条件之间只能通过AND连接。

■每一个条件中必须包含一个主选择表中的字段。

LEFT OUTER JOIN与INNER JOIN的主要区别是LEFT OUTER JOIN中对于主选择表的数据,即使在结合数据表中结合条件字段值不存在,也将该数据行选出,结合表中不存在的字段保持空白。

8.UPDATE、DELETE数据库时的注意事项?

■DELETE语句用以删除数据表里记录。

注意:删除记录并不能释放ORACLE里被占用的数据块表空间,它只把那些被删除的数据块标成unused。如果确实要删除一个大表里的全部记录,可以用TRUNCATE命令,它可以释放占用的数据块表空间:TRUNCATE TABLE表名,且此操作不可逆。

●DELETE FROM dbtab WHERE<cond>只要删除一行,SY-SUBRC返回0。

●DELETE dbtab FROM wa删除成功,SY-SUBRC返回0。

●DELETE dbtab[CLIENT SPECIFIED]FROM TABLE itab如果有一行不能删除,系统继续处理下一行,成功删除内表中所有行时,SY-SUBRC返回0。如果内表为空,会删除所有数据,且SY-SUBRC和SY-DBCNT都返回0。

■UPDATE语句用以修改数据表里记录。

注意:以上SQL语句对表都加上了行级锁,确认完成后,必须加上事物处理结束的命令COMMIT才能正式生效,否则改变不一定写入数据库里。如果想撤回这些操作,可以用命令ROLLBACK复原。

●UPDATE dbtab SET f1=g1...fn=gn WHERE<fix_key>只能更新非关键字,只要更新一行,SY-SUBRC返回0。

●UPDATE dbtab FROM wa根据工作区中的关键字更新对应的条目。

●UPDATE dbtab FROM TABLE itab根据内表关键字批量更新数据。

9.在程序中使用逻辑数据库的两种方法是什么?

在程序中使用逻辑数据库有两种方法,通常是通过GET事件或者功能模块进行调用,如NODES node。

通常情况下报表程序中输出的列表数据来自数据库,在ABAP程序中,可使用Open SQL或者Native SQL读取这些数据库表。

逻辑数据库则提供另一种选择数据的方式,可以代替SQL语句在数据库中提取数据,供程序操作。因而,可以认为逻辑数据库是一种报表设计程序中的辅助工具,而不能将其误解为一种可进行数据存储的数据库。SAP中提供多种类型的逻辑数据库,开发人员也可自行定义数据源。它的维护工具的事物代码是SE36或SLDB。

与普通SQL语句读取数据相比较,逻辑数据库有以下优点:

■预设的选择屏幕。

■逻辑数据库中可能包含多个数据表作为节点,在使用逻辑数据库的程序中,程序开发人员可以忽略具体的数据表之间通过外部关键字设定的关系,而是使用GET事件按照节点层次逐级获得数据。

■逻辑数据库可以提高程序数据的筛选效率,并在数据筛选的同时进行用户数据库访问的权限检查。

■逻辑数据的维护和设定可以独立于程序进行,如果数据源发生变化,也可以直接修改数据库,无需对所有程序进行修改。一般只有在HR模块编程时才需要使用到逻辑数据库。其他模块基本用不到,但HR必须用。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈