簇和簇表的概念
簇由一组共享相同数据块的多个表组成,它将这些表的相关行一起存储到相同数据块中,这样可以减少查询数据所需的磁盘读取量。创建簇后,用户可以在簇中创建表,这些表称为簇表。
簇和簇表在SAP ERP中的应用
在SAP ERP中簇表和透明表类似,但是簇表没有实体表,就只是一个结构。表簇是另一个概念,它在数据库中有对应的实体表。多个簇表可以对应一个表簇(BSEG,BSEC对应RFLBG)。
以下内容就以BSEG为例。BSEG是一个经常实用的簇表,它在数据库中没有对应的实体表,它的数据来源于表簇RFBLG (这里注意区分簇表和表簇)
RFBLG是一个表簇,它在数据库中有实体表。
由于关键字的定义,同一个凭证所有行的数据存到RFBLG中的一行中。
RFBLG和BSEG格式互相转换,是由sap引擎自动完成的。任何对BSEG的增删改查都会转为对RFBLG的增删改查,这个操作对程序员和数据库是隐藏的,它是由sap引擎完成的。如果查询BSEG某些字段(非RFBLG索引字段),数据库不会对这个字段进行筛选,筛选是由sap引擎完成的。这是造成查询bseg速度慢的原因。如下面的测试案例,生成的sql语句中没有buzei,altkt字段。
RFBLG和BSAS、BSIS、BSAK、BSIK、BSAD、BSID这6张表,在物理上,它们没有任何关系,它们是不同的实体表。系统生成凭证时,是分别写入RFBLG和其他6张表的。实际中会发现有的数据在其他6张表中都不存在,有的列在其他6张表中也不存在。