基于达梦分区表学习

基于达梦分区表学习


1.为何要使用分区表:

减少所有数据损坏的可能性,一个表空间损坏不影响其他表空间,提高可用性。
大大减少恢复时间。
将同一个表中的数据分布在不同的磁盘上,均衡磁盘上的 I/O 操作。
提高表的可管理性、可利用性和访问效率。

适用场景:
操作系统 Redhat 7 及以上版本
DM 数据库 DM 8.0 及以上版本
CPU 架构 x86、ARM、龙芯、飞腾等国内外主流 CPU

2.DM 支持的分区类型

范围分区
哈希分区
列表分区
组合分区
间隔分区
创建分区表的限制
DM 默认类型的表(索引组织表)创建分区表的时候,主键列必须在分区范围内。
DM堆表上创建分区时,各个分区需要放在相同的表空间上。

3.组合分区

上面提到的五种分区类型这里不再赘述,我们直接看组合分区,组合分区是指范围分区、列表分区或哈希分区的两两组合,以下介绍其中一种组合分区 range-hash。
员工的雇佣时间为主分区键,从 2007 年起,每 3 年划分一个分区,每个分区包含 2 个 hash 子分区。示例语句如下:
CREATE TABLE dmhr.rhp_emp
(
employee_id INT PRIMARY KEY,
employee_name VARCHAR (20),
identity_card VARCHAR (18),
email VARCHAR (50) NOT NULL,
phone_num VARCHAR (20),
hire_date DATE NOT NULL,
job_id VARCHAR (10) NOT NULL,
salary INT,
commission_pct INT,
manager_id INT,
department_id INT,
CONSTRAINT emp_email_uk4 UNIQUE (email),
CONSTRAINT emp_dept_fk4 FOREIGN KEY
(department_id)
REFERENCES dmhr.department (department_id),
CHECK (salary > 0)
)
PARTITION BY RANGE (hire_date)
SUBPARTITION BY HASH (email)
SUBPARTITION TEMPLATE (SUBPARTITION p1 , SUBPARTITION p2 )
(
PARTITION p1 VALUES LESS THAN (‘2010-1-1’),
PARTITION p2 VALUES LESS THAN (‘2013-1-1’),
PARTITION p3 VALUES LESS THAN (‘2016-1-1’),
PARTITION pmax VALUES LESS THAN (MAXVALUE))
STORAGE (NOBRANCH);
查询每个主分区下的子分区,示例语句如下:
SELECT partition_name,
subpartition_count,
composite,
high_value,
tablespace_name
FROM dba_tab_partitions
WHERE table_name = UPPER (‘rhp_emp’)
ORDER BY partition_position;
在这里插入图片描述

4.合并分区

将 2008 年和 2009 年入职员工各的分区合并为一个分区。
查询分区信息,示例语句如下:
SELECT ‘P3’ AS pars, COUNT() AS num FROM dmhr.rp_hiredt_emp PARTITION (P3)
UNION ALL
SELECT ‘P4’, COUNT(
) FROM dmhr.rp_hiredt_emp PARTITION (P4)
输出结果:

使用 MERGE……INTO 合并两个分区,示例语句如下:
ALTER TABLE dmhr.rp_hiredt_emp MERGE PARTITIONS p3, p4 into partition p3_4;
查询合并后的分区的记录数,示例语句如下:
SELECT COUNT(*) AS num FROM dmhr.rp_hiredt_emp PARTITION (P3_4);
输出结果:
在这里插入图片描述

注意:仅范围分区支持合并,并且待合并的分区必须相邻。

5.拆分分区

当一个分区变得太大以至于要用很长时间才能完成备份、恢复或维护操作时,可考虑将分区进行拆分。
将上例中已合并的分区 P3_4 重新拆分成 P3 和 P4.
使用 SPLIT……INTO 拆分分区,示例语句如下:
ALTER TABLE dmhr.rp_hiredt_emp SPLIT PARTITION p3_4 AT (‘2009-01-01’)
INTO (PARTITION p3, PARTITION p4);
查询拆分得到的 2 个分区,示例语句如下:
SELECT ‘P3’ AS pars, COUNT() AS num FROM rp_hiredt_emp PARTITION (P3)
UNION ALL
SELECT ‘P4’, COUNT(
) FROM rp_hiredt_emp PARTITION (P4)
输出结果:
在这里插入图片描述

注意:拆分分区会导致数据的重组和分区索引的重建。因此,拆分分区可能比较耗时,所需时间取决于分区数据量的大小。

详情见:https://eco.dameng.com/docs/zh-cn/sql-dev/advanced-partitoning.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值