文件名称:创建堆表-the design and analysis of algorithms
文件大小:4.17MB
文件格式:PDF
更新时间:2024-06-29 04:38:58
达梦,DM7
21.1 什么是堆表 普通表都是以 B树形式存放的,ROWID都是逻辑的 ROWID,即从 1一直增长下去。在 并发情况下,每次插入过程中都需要逻辑生成 ROWID,这样影响了插入数据的效率;对于 每一条数据都需要存储 ROWID值,也会花费较大的存储空间。堆表就是基于上述两个理由 而提出的。 简单地说,堆表是指采用了物理 ROWID形式的表,即使用文件号、页号和页内偏移而 得到 ROWID值,这样就不需要存储 ROWID值,可以节省空间。逻辑 ROWID在插入或修改 过程中,为了确保 ROWID的唯一性,需要依次累加而得到值,这样就影响了效率,而堆表 只需根据自己的文件号、页号和页内偏移就可以得到 ROWID,提高了效率。 普通表都是以 B树形式而存储在物理磁盘上,而堆表则采用一种“扁平 B树”方式存储, 结构如图 21.1所示。 页信息 链表1 链表N ... 数据页 数据页 数据页 数据页 数据页 数据页首指针 尾指针 尾指针 首指针 Root页 图 21.1 堆表存储方式 采用了物理 ROWID形式的堆表,DM服务器内部对聚集索引进行了调整,没有采用传统 B 树结构,取而代之的是“扁平 B 树”,数据页都是通过链表形式存储。为支持并发插入, 扁平 B树可以支持最多 128个数据页链表(最多 64个并发分支和最多 64个非并发分支), 在 B树的控制页中记录了所有链表的首、尾页地址。对于非并发分支,如果分支数有多个, 即存在多个链表,则不同的用户登录系统之后,会依据其事务 ID号,随机选择一条链表来 对堆表进行插入操作。对于并发分支,则不同用户会选择不同的分支来进行插入,如果存在 多个用户选择了同一条分支的情况,才需要等待其他用户插入结束并释放锁之后才能进行插 入。在并发情况下,不同用户可以在不同的链表上进行插入,效率得到较大提升。 21.2 创建堆表 堆表的创建有两种方式,一种是采用在配置文件 dm.ini 中设置参数,一种是在建表 语句中显式指定堆表选项。