达梦数据库基础知识(十二)管理堆表

堆表是一种采用物理ROWID的表,节省存储空间并提高插入效率。DM数据库的堆表使用扁平B树结构,支持并发插入。创建堆表可通过配置文件或SQL语句指定。堆表不支持聚集索引和列存储,建议在查询列上建立二级索引。在进行ALTER操作时需谨慎,可能需要重建索引。可通过SP_TABLEDEF系统过程查看堆表信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是堆表
普通表都是以B树形式存放的,ROWID都是逻辑的ROWID,即从1一直增长下去。在并发情况下,每次插入过程中都需要逻辑生成ROWID,这样影响了插入数据的效率;对于每一条数据都需要存储ROWID值,也会花费较大的存储空间。堆表就是基于上述两个理由而提出的。
简单地说,堆表是指采用了物理ROWID形式的表,即使用文件号、页号和页内偏移而得到ROWID值,这样就不需要存储ROWID值,可以节省空间。逻辑ROWID在插入或修改过程中,为了确保ROWID的唯一性,需要依次累加而得到值,这样就影响了效率,而堆表只需根据自己的文件号、页号和页内偏移就可以得到ROWID,提高了效率。
普通表都是以B树形式而存储在物理磁盘上,而堆表则采用一种“扁平B树”方式存储,结构如下图所示。
在这里插入图片描述采用了物理ROWID形式的堆表,DM服务器内部对聚集索引进行了调整,没有采用传统B树结构,取而代之的是“扁平B树”,数据页都是通过链表形式存储。为支持并发插入,扁平B树可以支持最多128个数据页链表(最多64个并发分支和最多64个非并发分支),在B树的控制页中记录了所有链表的首、尾页地址。对于非并发分支,如果分支数有多个,即存在多个链表,则不同的用户登录系统之后,会依据其事务ID号,随机选择一条链表来对堆表进行插入操作。对于并发分支,则不同用户会选择不同的分支来进行插入,如果存在多个用户选择了同一条分支的情况,才需要等待其他用户插入结束并释放锁之后才能进行插入。在并发情况下,不同用户可以在不同的链表上进行插入,效率得到较大提升。

二、创建堆表
堆表的创建有两种方式,一种是采用在配置文件dm.ini中设置参数,一种是在建表语句中显式指定堆表选项。

  1. INI参数方式
    用户可以在配置文件中,添加LIST_TABLE参数:
  1. 如果LIST_TABLE = 1,则在未显式指定表是否为堆表或非堆表时,默认情况下创建的表为堆表;
  2. 如果LIST_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值