达梦数据库 堆表

时间:2024-03-28 21:55:22

1.0:为什么使用堆表

普通表都是以 B 树形式存放的,ROWID 都是逻辑的 ROWID,即从 1 一直增长下去。在并发情况下,每次插入过程中都需要逻辑生成 ROWID,这样影响了插入数据的效率;对于每一条数据都需要存储 ROWID 值,也会花费较大的存储空间。堆表就是基于上述两个理由而提出的。

简单地说,堆表是指采用了物理 ROWID 形式的表,即使用文件号、页号和页内偏移而得到 ROWID 值,这样就不需要存储 ROWID 值,可以节省空间。逻辑 ROWID 在插入或修改过程中,为了确保 ROWID 的唯一性,需要依次累加而得到值,这样就影响了效率,而堆表只需根据自己的文件号、页号和页内偏移就可以得到 ROWID,提高了效率。

索引组织表:索引组织表是将数据按照一个或多个字段的某种排序顺序组织为一个树状结构,其中叶
子节点是表中的实际数据。它的优点在于,只要具有树状结构的索引存在,就可以极大地加
快查询速度,而堆表中无法实现这种性能优势。

达梦默认的表索引组织表, 达梦既支持索引组织表,又支持堆表。

1.1:使用图像化工具创建堆表:

1.2:使用命令行工具创建堆表:

create table "SYSDBA"."A1"
(
	"COLUMN_1" CHAR(10),
	"COLUMN_2" CHAR(10)
)
storage(initial 1, next 1, minextents 1, fillfactor 0, branch(6,2))
;

凡是 DDL 中带有 branch/no branch 关键字的表就是堆表:
no branch: 不带分支的堆表
Branch(6,2): 表示 6 个并发分支,2 个非并发分支。
(1<=Branch<=64)。

1.3: 查看表索引组织表和堆表的索引类型

select index_name,index_type,table_name from dba_indexes where table_name LIKE 'A%';

在这里插入图片描述
堆表的索引类型:FLAT
索引组织表索引类型:CLUSTER

1.4: 修改数据库的默认表类型

查看当前默认表类型:索引组织表

SELECT PARA_NAME,PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='LIST_TABLE'

List_table 参数:创建的表是否为堆表: 0 :否, 1:是。
在这里插入图片描述
修改表默认类型为堆表:

Sp_set_para_value(1,’LIST_TABLE’,1);

1.5:堆表的一些限制:

1、DM 暂不支持堆表的列存储
2、对表进行 alter 操作,数据记录 ROWID 可能发生改变,会引起索
引重建。
3、不支持聚簇索引.