当前位置:网站首页>达梦数据库_支持的表类型,用法,特性
达梦数据库_支持的表类型,用法,特性
2022-07-24 05:19:00 【ls2best】
达梦数据库有:普通表、分区表、临时表、堆表(rowid)、列存表(HUGE)、外部表等。默认的普通表是索引组织部表(索引组织表,无主键利用 rowid)。
一、普通表(索引组织表)
普通表都是以 B 树形式存放的,ROWID 都是逻辑的 ROWID,即从 1 一直增长下去。在并发情况下,每次插入过程中都需要逻辑生成 ROWID,这样影响了插入数据的效率;对于每一条数据都需要存储 ROWID 值,也会花费较大的存储空间。
二、堆表
采用了物理 ROWID 形式的堆表,DM 服务器内部对聚集索引进行了调整,没有采用传统B 树结构,取而代之的是“扁平 B 树”,数据页都是通过链表形式存储。为支持并发插入,扁平 B 树可以支持最多 128 个数据页链表(最多 64 个并发分支和最多 64 个非并发分支),在 B 树的控制页中记录了所有链表的首、尾页地址。
对于非并发分支,如果分支数有多个,即存在多个链表,则不同的用户登录系统之后,会依据其事务 ID 号,随机选择一条链表来对堆表进行插入操作。
对于并发分支,则不同用户会选择不同的分支来进行插入,如果存在多个用户选择了同一条分支的情况,才需要等待其他用户插入结束并释放锁之后才能进行插入。在并发情况下,不同用户可以在不同的链表上进行插入,效率得到较大提升。
SQL 建表语句指定 创建表时可以在 STORAGE 选项中指定需要创建的表形式, 与堆表创建形式相关的关键字有三个,分别是 NO BRANCH、BRANCH、CLUSTERBTR。
NOBRANCH:如果指定为 NOBRANCH,则创建的表为堆表,并发分支个数为 0,非并发分支个数为 1;
BRANCH(n,m):如果为该形式,则创建的表为堆表,并发分支个数为 n,非并发个数为 m;
BRANCH n:指定创建的表为堆表,并发分支个数为 n,非并发分支个数为 0;
CLUSTERBTR:创建的表为索引组织表。堆表由于其自身的特性,与普通表相比,也为自己增添了一些限制 :
1、没有聚集索引,如果用户需要借助聚集索引主键对数据进行排序则不推荐使用堆表;
2、DM 暂不支持堆表的列存储;
3、对表进行 alter 操作,数据记录 rowid 可能发生改变,会引起索引的重建。
堆表的维护:堆表在进行数据扫描过程中,有着其先天的优势。如果知道了数据记录的 ROWID,则直接可以对 ROWID 进行解码,得到该记录的文件号、页号和页内偏移,也就得到了该记录。所以建议在经常查询的列上建立二级索引,这样在进行操作中,先通过二级索引找到记录ROWID,就可以直接找到数据,效率有较大提高。堆表虽然支持表的 ALTER 操作,但是建议轻易不要进行此类操作。对表进行 ALTER操作,数据记录的 ROWID 有可能发生改变,这样每次进行 ALTER 操作,都可能进行索引的重建,需要花费较多的时间。达梦数据库支持对堆表的备份与还原操作。还原数据时,B树数据和二级索引可以同时被还原。
三、HUGE表/列存储表
1、HUGE FILE SYSTEM:是达梦数据库自有的,针对海量数据进行分析一种高效的表,列存储表是建立在HFS(分层文件管理系统)上的。
2、HUGE表建立在自己特有的表空间上HUGE表空间,默认在HMAIN表空间上。
3、相关信息存在V$huge_tablespace中。最多可以创建32767个huge表空间。
4、创建HUGE表时,根据with和without 来确定表是非事务还是事务型的HUGE表。
5、HUGE表与普通行表一样,可以进行增删改操作。
6、但HUGE表的删除与更新操作的效率会比行表低一些,并发操作性能会比行差一些。
HUGE表的一些限制:1、支持定义NULL,NOT NULL, UNIQUE ,PRIMARY KEY 2、HUGE表不建立聚族索引,允许建立二级索引,不支持位图索引, 其中unique不检查唯一性。 3、不支持表空间限制 4、不支持大字段列 5、不支持全文索引 6、不支持建立触发器 7、不允许建触发器。
四、外部表
外部表是表的数据不会放在数据库里面,会放在操作系统的文件里面。通过数据库外部表可以查看外部文件的数据。1、建立外部表时,不会产生页、簇、段等存储结构。2、只能与表相关的定义放在数据库字典中,不能对外部表的内容进行修改(update、instert、 delete)3、不能对外部表创建索引。4、外部表可以通过SQL语句解码器来完成。而不需要将外部表装载到数据库中。
用途:要访问其他数据并不在数据库当中,要查数据。
五、分区表
为提高数据库在大数据量读写操作和查询时的效率,达梦数据库提供了对表和索引进行分区的技术,把表和索引等数据库对象中的数据分割成小的单位,分别存放在一个个单独的段中,用户对表的访问转化为对较小段的访问,以改善大型应用系统的性能。达梦提供了水平分区的方式,该方式包含了范围(range)、哈希(HASH)和列表(list)、间隔分区(interval)四种方法。
分区的方法:
(1)范围(range)分区:对表中的某些列上值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。
(2)哈希(hash)分区:通过指定分区编号来均匀分布数据的一种分区类型,通过在I/O设备上进行散列分区,使得这些分区大小基本一致。
(3)列表(list)分区:通过指定表中的某个列的离散值集,来确定应当存储在一起的数据。
(4)间隔(interval)分区:间隔分区其实和范围分区是一样的,但是它比范围分区要更加高级。范围分区需要我们手动的去分配每个范围区间,所以使用起来不是那么灵活。例如某公司的数据,想要以年度为分区范围,每年都要手动新增一个分区,比较麻烦。而间隔分区就能完美的解决此类问题。
(5)多级分区表:上述三种方式的任意组合。
注意事项:
1、解决分区表超出范围问题,范围分区关键字:MAXVALUE,列表分区DEFAULT。
2、局部唯一索引必须包含全部分区列,创建分区表如果表中有主键列,分区列必须包含主键。分区表中没有主键列或唯一索引列,则可以创建。
3、堆表即便有主键列或唯一索引列也可以创建分区。
4、水平分区堆表各子表必须位于同一个表空间。没有堆表的情况,分区表可以在不同表空间。
六、临时表
1、在达梦里面不可以创建临时表空间,用户不能手动创建临时表空间;
2、可以创建临时表;
3、用户可以通过系统函数 sf_rest_temp_ts 释放表空间;
4、通过 select * from v$dm_ini where para_name link ‘%TEMP%’;
5、通过sp_set_para_value(2,‘temp_size’,200)设置临时表空间大小;
6、临时表空间文件在磁盘占用大小不会缩减,用户可以通过sf_rest_temp_ts来进行磁盘空间清理;
7、TEMP表空间完全由达梦数据库自动维护
-- 临时表分为两种级别:(事务级,会话级):
-- 1、on commit delete rows:临时表是事务级的,每次事务提交或回滚之后,表中的所有数据被删除。
-- 2、on commit paresrve rows:指定临时表是会话级,会话结束的时候清空表。
CREATE GLOBAL TEMPORARY TABLE TEMP_SESSION_TAB (ID INT,NAME VARCHAR(20))
ON COMMIT PRESERVE ROWS; --创建基于会话级的临时表。
CREATE GLOBAL TEMPORARY TABLE TEMP_TRX_TAB (ID INT , NAME VARCHAR(20))
ON COMMIT DELETE ROWS; --创建基于事务级临时表。
SELECT * FROM SYS.DBA_TABLES WHERE DBA_TABLES.TABLE_NAME LIKE 'TEMP_%';达梦社区地址:https://eco.dameng.com
边栏推荐
- 稀缺性之于Web3:如何成为去中心化世界的胜利者
- 网页内嵌B站视频,隐藏相关控件
- Moonbeam Orbiters Program:为收集人参与 Moonbeam 和 Moonriver 提供新方式
- MySQL之索引&执行计划
- 【vsphere高可用】主机故障切换
- 开发技术指南 | 最全 Substrate 与 Polkadot 技术文档、教程、课程
- Public chain Sui layer1 network
- Mapboxgl + GeoServer configuration local map tutorial
- mysql数据库的授权访问
- 音乐 NFT 为什么火了?Polkadot 或将成为发展音乐 NFT 的最佳选择
猜你喜欢
随机推荐
canvas - Bezier 贝塞尔曲线
Insanity:1 (insanity hosting) target penetration vulnhub
自定义MVC 3.0
MySQL之函数运用
Analysis of logic development principle of quantitative contract clip arbitrage robot system
LP双币流动性质押挖矿系统逻辑开发分析
黑龙江省SVG格式地图的创建及生成
Whole station downloader recommendation
通用分页01
vscode配置autoprefixer
The bottom of decentralization is consensus -- Interpretation of Polkadot mixed consensus mechanism
OpenGL draws a cone on the screen, which has four faces, each of which is a triangle. Add lighting and texture effects to the cone
MySQL之CRUD
Moonbeam Orbiters Program:为收集人参与 Moonbeam 和 Moonriver 提供新方式
音乐 NFT 为什么火了?Polkadot 或将成为发展音乐 NFT 的最佳选择
Flink函数(2):CheckpointedFunction
The profound meaning of unlimited ecological development in Poka -- Multidimensional Interpretation of parallel chain
Function analysis of GeoServer rest API
vulnhub-SolidState: 1靶机渗透测试
微信小程序报错request:fail -2:net::ERR_FAILED









