达梦索引组织表和堆表

news2024/11/15 10:01:48

达梦数据库默认创建的是索引组织表,‌而Oracle数据库默认创建的是堆表。‌这两种表类型的区别主要体现在数据存储和组织方式上:

  1. 索引组织表(‌Index Organized Table, IOT):‌
    索引组织表‌有且仅有一个聚簇索引键。索引组织表也称“普通表”,数据都是以B树形式存放的,ROWID都是逻辑的ROWID,即从1一直增长下去。在并发情况下,每次插入过程中都需要逻辑生成ROWID,这样影响了插入数据的效率;对于每一条数据都需要存储ROWID值,也会花费较大的存储空间。
    索引组织表数据按照聚簇索引键排序(‌数据是有序的,‌插入有序)。
  2. 堆表(Heap Table):
    堆表的数据是以挂链形式存储的,一般情况下,支持最多128个链表,一个链表在物理上就是一个段,堆表采用的是物理rowid,在插入过程中,rowid在事先已确定,并保证其唯一性,所以可以并发插入,插入效率很高,且由于rowid是即时生成,无需保存在物理磁盘上,也节省了空间。
    ‌堆表的数据存储没有特定的顺序,‌是随机存储的。
    为支持并发插入,扁平B树可以支持最多128个数据页链表(最多64个并发分支和最多64个非并发分支),在B树的控制页中记录了所有链表的首、尾页地址。

NOBRANCH:如果指定为 NOBRANCH,则创建的表为堆表,并发分支个数为0,非并发分支个数为1;
BRANCH(N,M):如果为该形式,则创建的表为堆表,并发分支个数为N,非并发个数为M;
BRANCH N:指定创建的表为堆表,并发分支个数为 N,非并发分支个数为1;
CLUSTERBTR:创建的表为非堆表,即普通B树表。

用户可以在配置文件中,添加LIST_TABLE参数:

  1. 如果LIST_TABLE = 1,则在未显式指定表是否为堆表或非堆表时,默认情况下创建的表为堆表;
  2. 如果LIST_TABLE = 0,则在未显式指定表是否为堆表或非堆表时,默认情况下创建的表为普通表形式。

1. 创建表

创建索引组织表

CREATE TABLE CLUSTER_T1(C1 INT,C2 INT,C3 VARCHAR(20) ,C4 VARCHAR(20));

创建堆表

CREATE TABLE HEAP_T1(C1 INT ,C2 INT,C3 VARCHAR(20) ,C4 VARCHAR(20)) STORAGE(NOBRANCH);

通过DBA_TABLES视图区分索引组织表和堆表

SELECT TABLE_NAME, IOT_TYPE 
  FROM DBA_TABLES 
 WHERE TABLE_NAME IN ('CLUSTER_T1',
                      'HEAP_T1');

在这里插入图片描述




通过索引类型区分索引组织表和堆表,可以看到这两种类型的表都会创建一个默认索引

   SELECT D1.TABLE_NAME,
          D1.INDEX_NAME,
          D1.INDEX_TYPE,
          S2.XTYPE
     FROM SYS.DBA_INDEXES D1
LEFT JOIN SYS.SYSOBJECTS S1
       ON D1.INDEX_NAME=S1.NAME
      AND S1.SCHID=(SELECT A.ID FROM SYSOBJECTS A WHERE A.TYPE$ ='SCH' AND A.NAME='SYSDBA')
LEFT JOIN SYS.SYSINDEXES S2
       ON S1.ID=S2.ID
    WHERE D1.TABLE_NAME IN ('CLUSTER_T1',
                            'HEAP_T1');

在这里插入图片描述




索引组织表只能创建一个聚集索引。手动再添加聚集索引,则会覆盖默认创建的聚集索引。
两张表添加主键索引,均为二级索引。

create cluster  index "SYSDBA"."IDXC_CLUSTER_T1_C1" on "SYSDBA"."CLUSTER_T1"("C1");
alter table "SYSDBA"."CLUSTER_T1" add primary key("C1");
alter table "SYSDBA"."HEAP_T1" add primary key("C1");

在这里插入图片描述




2. 测试

插入数据

[执行语句1]:
TRUNCATE TABLE CLUSTER_T1;
执行成功, 执行耗时80毫秒. 执行号:33240
影响了0条记录

[执行语句2]:
TRUNCATE TABLE HEAP_T1;
执行成功, 执行耗时21毫秒. 执行号:33241
影响了0条记录

[执行语句3]:
INSERT INTO cluster_t1 SELECT LEVEL C1,level%100 C2,'test','test' FROM DUAL CONNECT BY LEVEL<=5000000;
执行成功, 执行耗时1分 28933毫秒. 执行号:33242
影响了5,000,000条记录

[执行语句4]:
INSERT INTO    HEAP_T1 SELECT LEVEL C1,level%100 C2,'test','test' FROM DUAL CONNECT BY LEVEL<=5000000;
执行成功, 执行耗时28秒 235毫秒. 执行号:33243
影响了5,000,000条记录

创建的HEAP_T2表,有并发分支2个,非并发分支4个

[执行语句1]:
CREATE TABLE HEAP_T2(C1 INT ,C2 INT,C3 VARCHAR(20) ,C4 VARCHAR(20)) STORAGE(BRANCH(2,4));
执行成功, 执行耗时8毫秒. 执行号:33247
影响了0条记录

[执行语句2]:
INSERT INTO HEAP_T2 SELECT LEVEL C1,level%100 C2,'test','test' FROM DUAL CONNECT BY LEVEL<=5000000;
执行成功, 执行耗时9秒 170毫秒. 执行号:33248
影响了5,000,000条记录

对比数据占用空间

select SEGMENT_NAME,BYTES/1024/1024 as SIZE_M from SYS.DBA_SEGMENTS where SEGMENT_NAME in ('CLUSTER_T1', 'HEAP_T1', 'HEAP_T2');

在这里插入图片描述




3. 总结

  1. 对于大数据量的存量数据表,使用索引组织表,占用空间更小;
  2. 对于经常有大批量的数据插入场景,使用堆表,插入速度更快,效率更高;
  3. 对于小数据量的表,使用索引组织表,虽然占用空间更多但可以接受;
  4. 堆表增加并发分支和非并发分支,效率会更高。



达梦社区地址
https://eco.dameng.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1943551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UGUI优化篇--UGUI合批

UGUI合批 UGUI合批规则概述UGUI性能查看工具合批部分的特殊例子一个白色image、蓝色image覆盖了Text&#xff0c;白色image和Text哪个先渲染 Mask合批Mask为什么会产生两个drawcallMask为什么不能合批Mask注意要点 RectMask2D为什么RecMask2D比Mask性能更好主要代码RectMask2D注…

【笔记】学习记录

2024年7月23日 1.图的5中存储方式 2.二叉树的先序&#xff0c;中序&#xff0c;后序遍历。 学了图的存储方式之后&#xff0c;二叉树好像就是小菜一碟一样。注意一下名词的顺序就可以了。 所谓先中后序&#xff0c;就是先根&#xff0c;中根&#xff0c;后根的差别。没有其…

数据库练习-3

查询要求&#xff1a; 查询代码&#xff1a;

Apache2服务介绍

apache2 安装使用配置web访问配置虚拟主机配置代理正向代理反向代理 官网 互联网上排名第一的 HTTP 服务器&#xff0c;Apache HTTP 服务器项目致力于开发和维护适用于现代操作系统&#xff08;包括 UNIX 和 Windows&#xff09;的开源 HTTP 服务器。该项目的目标是提供安全、…

【系列教程之】1、点亮一个LED灯

1、点亮一个LED灯 作者将狼才鲸创建日期2024-07-23 CSDN教程目录地址&#xff1a;【目录】8051汇编与C语言系列教程本Gitee仓库原始地址&#xff1a;才鲸嵌入式/8051_c51_单片机从汇编到C_从Boot到应用实践教程 本源码包含C语言和汇编工程&#xff0c;能直接在电脑中通过Keil…

SQL性能优化秘籍:如何避免计算导致索引失效

适用于MySQL、PostgreSQL、Oracle等各种数据库的优化技巧 问题剖析 设想我们为customer表的c_acctbal列创建了一个B树索引c_acctbal_idx&#xff0c;以加速相关查询。然而&#xff0c;一个看似无害的计算可能会阻碍索引的使用。比如这样的查询&#xff1a; SELECT * FROM cus…

二次元手游《交错战线》游戏拆解

交错战线游戏拆解案 游戏亮点即核心趣味 一、关键词&#xff1a; 回合制游戏、二次元、机甲、横板、剧情、养成、异星探索。 二、游戏亮点&#xff1a; 符合目标群体审美的原画。 三、核心趣味&#xff1a; 抽卡、肝或者氪金解锁新皮肤。 核心玩法及系统规则 核心玩法&…

海外IP代理科普:代理池有什么用?代理池大小的影响

在当今数字化时代&#xff0c;网络爬虫已经成为获取各类信息必不可少的工具。在大规模数据抓取中&#xff0c;使用单一 IP 地址或同一 IP 代理往往会面临抓取可靠性降低、地理位置受限、请求次数受限等一系列问题。为了克服这些问题&#xff0c;构建代理池成为一种有效的解决方…

【Android Compose】ListView效果

【Android Compose】ListView效果 1、Column、Row 和 Box2、LazyColumn和LazyRow3、Compose 中的状态4、ListView效果5、android-compose-codelabs Jetpack Compose 使用入门 Jetpack Compose 教程 Jetpack Compose 1、Column、Row 和 Box Compose 中的三个基本标准布局元素是 …

C++相关概念和易错语法(24)(map、迭代器分类)

1.map 在上篇文章中&#xff0c;我着重介绍了set&#xff0c;由于map和set同源&#xff0c;所以这次我会着重介绍map别于set的地方 &#xff08;1&#xff09;模板参数 set是以单一的key作为成员变量&#xff0c;而map是以pair作为成员变量&#xff0c;而pair的first作为key来…

使用千帆SDK压测千帆大模型平台上的服务

场景 给用户提供千帆标准的压测工具&#xff08;千帆SDK&#xff09;。满足以下使用场景&#xff1a; 测试sft模型部署到算力单元后&#xff0c;实际的性能效果 对比模型压缩后的性能效果 测试预置服务的性能 压测数据准备&#xff08;数据格式规范说明&#xff09; 可用…

DAY05 CSS

文章目录 1 CSS选择器(Selectors)8. 后代(包含)选择器9. 直接子代选择器10. 兄弟选择器11. 相邻兄弟选择器12. 属性选择器 2 伪元素3 CSS样式优先级1. 相同选择器不同样式2. 相同选择器相同样式3. 继承现象4. 选择器不同权值的计算 4 CSS中的值和单位1. 颜色表示法2. 尺寸表示法…

Try ubuntu core (by quqi99)

作者&#xff1a;张华 发表于&#xff1a;2024-07-20 版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99) try ubuntu core on qemu #ovmf is to ensure compatibility with the re…

电机线电流与转差率曲线理论推导

1.推导基础&#xff1a; #已知正转正拉电流近似为&#xff1a; curr_in_upward (im im*(rm(lml2)*2*np.pi*freq_in*1j)/(r2 l2*2*np.pi*freq_in*1j (1-s)/s*r2))#同工况同负载&#xff0c;正转反拉电流近似为&#xff1a; curr_in_downward (im im*(rm(lml2)*2*np.pi*f…

代码随想录第六十二天 | 739. 每日温度 , 496.下一个更大元素 I ,503.下一个更大元素II

先复习一下栈与队列。栈是先进后出&#xff0c;队列是先进先出。二者都属于STL容器&#xff08;版本是SGI STL&#xff09;中的容器适配器。底层容器完成其所有的工作&#xff0c;对外提供统一的接口&#xff0c;底层容器是可插拔的。如果没有指定底层实现的话&#xff0c;默认…

22-联合体与枚举

22-联合体与枚举 文章目录 22-联合体与枚举一、 联合体1.1 定义和特点1.2 语法1.3 示例1.4 联合体的使用1.5 联合体的使用&#xff1a;检查系统的字节序 二、 枚举2.1 定义和特点2.2 语法2.3 枚举常量的值可以手动修改 一、 联合体 1.1 定义和特点 联合体&#xff08;Union&a…

扩展PyTorch视觉模型

扩展PyTorch视觉模型 目录 扩展PyTorch视觉模型 一、概述 二、扩展基本视觉模型的原因 1. 性能提升 2. 功能扩展 3. 资源管理 三、扩展PyTorch视觉模型的方法 1.修改现有架构 2.应用模型集成技术 3.量化和压缩模型 四、高级技巧与实践 1.自定义训练循环 2.深度模型…

【SpringBoot】 jasypt配置文件密码加解密

目前我们对yml配置文件中的密码都是明文显示&#xff0c;显然这不安全&#xff0c;有的程序员离职了以后可能会做一些非法骚操作&#xff0c;所以我们最好要做一个加密&#xff0c;只能让领导架构师或者技术经理知道这个密码。所以这节课就需要来实现一下。 我们可以使用jasypt…

Gitops-万字保姆级教程-小白也可以轻松学会! (Part 2)

系列文章目录 本文章分为2个部分&#xff1a; Part 1主要涉及Gitlab、Gitlab-Runner、Git-Ci、Sonar-qube-CI阶段 Part 2主要涉及ArgoCD阶段 Gitops-万字保姆级教程-小白也可以轻松学会! (Part 1)-CSDN博客 Gitops-万字保姆级教程-小白也可以轻松学会! (Part 2) 文章目录 目…

【测试能力提升----fastapi框架项目】需求分析

1. FastAPI框架架构 2. 场景分析 2.1 系统分类 单一用户权限系统&#xff08;实用于CMS模型&#xff09;多用户多权限系统&#xff08;实用于多租商户类型&#xff09; 2.2 功能模块 用户登录模块用户管理模块角色权限管理模块基本设置模块日志模块 2.3 需求分析 用户登录…