【08】SAP ABAP性能优化 - 正确使用簇表(Cluster Table)和池表(Pooled Table)

SAP提供了三种类型的数据库表,透明表(Transparent Table),簇表(Cluster Table)和池表(Pooled Table)。其中,透明表是最常见的数据库表,其使用主要注意“Buffer”和“Index”两个方面。但对于簇表和池表,很多ABAPer并不熟悉其原理和用法。

在本篇博客中,将介绍如何在ABAP中使用簇表和池表。

1.概念解析

1.1 “簇表”和“表簇”

首先要强调的一个认知是,簇表和池表在数据库层是真实的物理存在,这也就是说簇表和池表是真实的数据库表。

在应用层SE11中定义和看到是簇表(Cluster Table)和池表(Pooled Table),在数据库层面存在的物理实体是“表簇(Table Cluser)”和“表池(Table Pool)”,也即簇表和池表并不是以独立表的形式存在的,而是以“表簇”和“表池”的存储形式存在。

下图展示了“表簇”在数据库层的存储方式。表簇是以簇表中定义的主键为Key值字段,然后通过特殊主键Pageno来确保数据的唯一性的。簇表中实际的字段内容是在Vardata字段中,通过压缩后的字符串的形式存储的。

簇表这种存储方式的优点是,簇表可以将相关的数据归集到一起,便于统一管理;并在存储过程中,通过压缩的形式存储,进行数据加密,同时节省数据空间。

但也带来了一些缺点,簇表不支持Index。当通过非主键字段访问簇表时,数据库的搜索效率是很低的。可以想象一下这个过程,数据的搜索对象是一个表簇(不仅仅是一张簇表,而是多个簇表的集合),面对的数据量是远大于真实的数据量的,通过在搜索之前,数据库还要经历解压的过程,然后在经过数据的处理和搜索。

因此,在面对簇表的数据时,首先尽可能要使用主键访问,如不能满足需求,使用簇表所对应的业务透明表进行操作。

1.2 “池表”和“表池”

与簇表的概念类似,池表和簇表的不同点在于,池表的主键包括Tabname和Varkey, 这样的话,不同的池表在表池中是以相对独立的方式存储的,但在数据的压缩程度上(压缩的数据存储在Vardata字段中),要小于簇表的效果。因此,池表面对的对象通常是数据量较小的系统表。

2. 举例

2.1 簇表BSEG和表簇RFBLG

在SE11中,可以看到这张非常著名的簇表BSEG,以及其对应的表簇RFBLG。

表簇RFBLG是众多簇表的大集合,包括BSEG,BSED, BSEC 等等。

当使用Open SQL操作簇表BSEG时,可以看到转化的Native SQL操作的对象是表簇RFBLG。

2.2 池表A001和表簇KAPOL

在SE11中,可以看到池表A001的定义,以及其对应的表池KAPOL。

表簇KAPOL是众多池表的大集合,包括A001,A004, A005 等等。与簇表类似,在Open SQL操作池表A001时,可以看到转化的Native SQL操作的对象是表池KAPOL。

3 使用备注

1. 簇表和池表不支持INDEX,JOIN, GROUP BY, ORDER BY 等类型的数据库操作( 这是由于数据的存储形式造成的 )。

2. 簇表和池表不支持DB View

3. 避免使用非主键字段检索簇表,否则对于程序性能将会造成很大的影响。应使用对应的透明表进行操作(例如:使用BSID、BSAD, BSIK、BSAK, BSIS、BSAS替代簇表BSEG )。

4. 在S/4版本上,BSEG和A001等簇表或池表已经变成的透明表,上述约束仅对ECC版本的程序。

 

《从实例学SAP ABAP编程1-10章》是一本SAP ABAP编程的经典入门教材。本书从简单的SAP ABAP编程入手,通过多个实例向读者展示了SAP ABAP编程的核心概念和语法。 在第一章中,本书通过一个简单的例子介绍了SAP ABAP编程的基础知识,讲解了ABAP编辑器、ABAP数据字典和ABAP Workbench等重要工具的用法。 在第二章中,本书通过一个简单的例子向读者介绍了ABAP表格的创建和维护,并讲解了一些与表格相关的SAP ABAP编程的语法和概念。 在第三章中,本书介绍了SAP ABAP编程中的面向对象编程,通过几个例子向读者展示了如何使用类、对象和继承等概念进行SAP ABAP编程。 在第四章中,本书介绍了SAP ABAP编程中的函数模块,向读者讲解了如何创建和调用函数模块,以及如何在SAP系统中使用函数模块。 在第五章中,本书介绍了SAP ABAP编程中的异常处理,向读者讲解了如何使用TRY/CATCH语句处理SAP系统中的异常情况。 在第六章中,本书介绍了SAP ABAP编程中的Web服务,向读者讲解了如何创建和使用SAP系统中的Web服务,以及如何使用HTTP和SOAP协议进行数据通信。 在第七章中,本书介绍了SAP ABAP编程中的ALV报表,向读者讲解了如何创建和维护SAP系统中的ALV报表,以及如何对报表进行数据操作和定制。 在第八章中,本书介绍了SAP ABAP编程中的BADI和Enhancement点,向读者讲解了如何使用BADI和Enhancement点扩展和修改SAP系统中的业务逻辑。 在第九章中,本书介绍了SAP ABAP编程中的Smart Form,向读者讲解了如何使用Smart Form创建和维护SAP系统中的表单。 在第十章中,本书介绍了SAP ABAP编程中的SAP HANA数据库,向读者讲解了如何使用SAP HANA数据库进行高效的数据处理和分析。 通过阅读本书,读者可以快速掌握SAP ABAP编程的核心知识和技能,从而能够独立进行SAP系统的开发和维护工作。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十年铸器

给作者赏杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值