DM8达梦数据库:达梦数据库分区表
达梦数据库-二级分区表:
创建一个产品销售记录表 sales,记录产品的销量情况。由于产品只在几个固定
的城市销售,所以可以按照销售城市区号对该表进行 LIST 分区。再按照年份RANGE范围分区
示例没创建对应的表空间,默认存到MAIN表空间(正式环境不可默认)
CREATE TABLE "SYSDBA"."SALES_NEW"
(
"SALES_ID" INT,
"SALEMAN" CHAR(20),
"SALEDATE" DATETIME(6),
"CITY" CHAR(10))
PARTITION BY LIST("CITY")
SUBPARTITION BY RANGE("SALEDATE") SUBPARTITION TEMPLATE
(
SUBPARTITION "P2021" VALUES LESS THAN(DATETIME'2022-01-01 00:00:00'),
SUBPARTITION "P2022" VALUES LESS THAN(DATETIME'2023-01-01 00:00:00'),
SUBPARTITION "P2023" VALUES LESS THAN(DATETIME'2024-01-01 00:00:00'),
SUBPARTITION "P2024" VALUES LESS THAN(DATETIME'2025-01-01 00:00:00'),
SUBPARTITION "P2025" VALUES LESS THAN(DATETIME'2026-01-01 00:00:00'),
SUBPARTITION "P2026" VALUES LESS THAN(DATETIME'2027-01-01 00:00:00'),
SUBPARTITION "P2027" VALUES LESS THAN(DATETIME'2028-01-01 00:00:00'),
SUBPARTITION "P2028" VALUES LESS THAN(DATETIME'2029-01-01 00:00:00'),
SUBPARTITION "P2029" VALUES LESS THAN(DATETIME'2030-01-01 00:00:00'),
SUBPARTITION "P2030" VALUES LESS THAN(DATETIME'2031-01-01 00:00:00'),
SUBPARTITION "P2099" VALUES EQU OR LESS THAN(MAXVALUE)
)
(
PARTITION "P0310" VALUES('0310') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION "P0311" VALUES('0311') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION "P0312" VALUES('0312') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION "P0313" VALUES('0313') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION "P0314" VALUES('0314') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION "P0315" VALUES('0315') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION "P0316" VALUES('0316') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION "P0317" VALUES('0317') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION "P0318" VALUES('0318') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION "P0319" VALUES('0319') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION "P0335" VALUES('0335') STORAGE(ON "MAIN", CLUSTERBTR) ,
PARTITION "P9999" VALUES(DEFAULT) STORAGE(ON "MAIN", CLUSTERBTR)
) STORAGE(ON "MAIN", CLUSTERBTR) ;
二级分区表manager管理工具如图:
二级分区表逻辑图:
介绍:
达梦数据库:达梦数据库分区表总结
参考:DM8_SQL语言使用手册.pdf
第 3 章 数据定义语句
3.6.1.4 定义 水平分区表
水平分区包括范围分区、哈希分区和列表分区三种。水平分区表的创建需要通过
<PARTITION 子句>指定。
范围(RANGE)分区,按照分区列的数据范围,确定实际数据存放位置的划分方式。
列表(LIST)分区,通过指定表中的某一个列的离散值集,来确定应当存储在一起的数据。范围分区是按照某个列上的数据范围进行分区的,如果某个列上的数据无法通过划分范围的方法进行分区,并且该列上的数据是相对固定的一些值,可以考虑使用 LIST 分区。
一般来说,对于数字型或者日期型的数据,适合采用范围分区的方法;而对于字符型数据,取值比较固定的,则适合于采用 LIST 分区的方法。
哈希(HASH)分区,对分区列值进行 HASH 运算后,确定实际数据存放位置的划分方式,主要用来确保数据在预先确定数目的分区中平均分布,允许只建立一个 HASH 分区。在很多情况下,用户无法预测某个列上的数据变化范围,因而无法实现创建固定数量的范围分区或 LIST 分区。在这种情况下,DM 哈希分区提供了一种在指定数量的分区中均等地划分数据的方法, 基于分区键的散列值(HASH 值)将行映射到分区中。当用户向表中写入数据时,数据库服务器将根据一个哈希函数对数据进行计算,把数据均匀地分布在各个分区中。
在哈希分区中,用户无法预测数据将被写入哪个分区中。
在很多情况下,经过一次分区并不能精确地对数据进行分类,这时需要多级分区表。在进行多级分区的时候,三种分区类型还可以交叉使用。
LIST 分区表使用说明:
- LIST 分区支持 DEFAULT 关键字的使用,所有不满足分区条件的数据,都划分为 DEFAULT 的分区,但 DEFAULT 关键字需要用户指定,系统不会自动创建 DEFAULT 分区。
- LIST 分区范围值不能为 NULL。
- LIST 分区子表范围值个数与数据页大小和相关系统表列长度相关,存在以下
限制:
a) 4K 页,单个子表最多支持 120 个范围值。
b) 8K 页,单个子表最多支持 254 个范围值。
c) 16K 或 32K 页,单个子表最多支持 270 个范围值。
- 范围分区和哈希分区的分区键可以多个,最多不超过 16 列;LIST 分区的分区键必须唯一;
- 范围分区表使用说明:
- 范围分区支持 MAXVALUE 值的使用,MAXVALUE 代表一个比任何值都大的值。MAXVALUE 值需要用户指定才能使用,作为分区中的最大值。
- 范围分区的范围值表达式类型应与分区列类型一致,否则按分区列类型进行类型转换。
- 对于范围分区,增加分区必须在最后一个分区范围值的后面添加,要想在表的开始范围或中间增加分区,应使用 SPLIT PARTITION 语句。
表中的每个分区都可以通过“PARTITION”子句指定一个名称。并且每一个分区都有一个范围,通过“VALUES LESS THAN”子句可以指定上界,而它的下界是前一个分区的上界。如分区 p2 的 time 字段取值范围是[‘2018-04-01’, ‘2018-07-01’)。如果通过“VALUES EQU OR LESS THAN”指定上界,即该分区包含上界值
达梦数据库- 一级分区表:
例 1 创建一个范围分区表 callinfo,用来记录用户 2018 年的电话通讯信息,包括
主叫号码、被叫号码、通话时间和时长,并且根据季度进行分区。
CREATE TABLE callinfo(
caller CHAR(15),
callee CHAR(15),
time DATETIME,
duration INT
)
PARTITION BY RANGE(time)(
PARTITION p1 VALUES LESS THAN ('2018-04-01'),
PARTITION p2 VALUES LESS THAN ('2018-07-01'),
PARTITION p3 VALUES LESS THAN ('2018-10-01'),
PARTITION p4 VALUES EQU OR LESS THAN ('2018-12-31'));
--'2018-12-31'也可替换为 MAXVALUE
表中的每个分区都可以通过“PARTITION”子句指定一个名称。并且每一个分区都有一个范围,通过“VALUES LESS THAN”子句可以指定上界,而它的下界是前一个分区的上界。如分区 p2 的 time 字段取值范围是[‘2018-04-01’, ‘2018-07-01’)。如果通过“VALUES EQU OR LESS THAN”指定上界,即该分区包含上界值,如分区 p4 的 time字段取值范围是[‘2018-10-01’, ‘2018-12-31’]。另外,可以对每一个分区指定STORAGE 子句,不同分区可存储在不同表空间中。
例 2 创建多列分区。创建一个范围分区表 callinfo,以 time,duration 两列为
分区列。
CREATE TABLE callinfo(
caller CHAR(15),
callee CHAR(15),
time DATETIME,
duration INT
)
PARTITION BY RANGE(time, duration)(
PARTITION p1 VALUES LESS THAN ('2018-04-01',10),
PARTITION p2 VALUES LESS THAN ('2018-07-01',20),
PARTITION p3 VALUES LESS THAN ('2018-10-01',30),
PARTITION p4 VALUES EQU OR LESS THAN ('2018-12-31', 40) );
insert into CALLINFO values('CHERRY','JACK','2018-12-31',40);
insert into CALLINFO values('CHERRY','JACK','2018-12-31',41); --报错:没有找到合适的分区
如果分区表包含多个分区列,采用多列比较方式定位匹配分区。首先,比较第一个分区列值,如果第一列值在范围之内,就以第一列为依据进行分区;如果第一列值处于边界值,那么需要比较第二列的值,根据第二列为依据进行分区;如果第二列的值也处于边界值,需要继续比较后续分区列值,以此类推,直到确定目标分区为止。匹配过程参看下表。
例 3 查询分区子表,直接使用子表名称进行查询。
当在分区表中执行 DML 操作时,实际上是在各个分区子表上透明地修改数据。当执行SELECT 命令时,可以指定查询某个分区上的数据。
例如,查询 callinfo 表中分区 p1 的数据,可以通过以下方式:
SELECT * FROM callinfo PARTITION (p1);
例 4 创建一个产品销售记录表 sales,记录产品的销量情况。由于产品只在几个固定
的城市销售,所以可以按照销售城市对该表进行 LIST 分区。
CREATE TABLE sales(
sales_id INT,
saleman CHAR(20),
saledate DATETIME,
city CHAR(10)
)
PARTITION BY LIST(city)(
PARTITION p1 VALUES ('北京', '天津'),
PARTITION p2 VALUES ('上海', '南京', '杭州'),
PARTITION p3 VALUES ('武汉', '长沙'),
PARTITION p4 VALUES ('广州', '深圳'),
PARTITION p5 VALUES (default)
);
例 5 如果销售城市不是相对固定的,而是遍布全国各地,这时很难对表进行 LIST 分
区。如果为该表进行哈希分区,可以很好地解决这个问题。
CREATE TABLE sales01(
sales_id INT,
saleman CHAR(20),
saledate DATETIME,
city CHAR(10)
)
PARTITION BY HASH(city)(
PARTITION p1,
PARTITION p2,
PARTITION p3,
PARTITION p4
);
如果不指定分区表名,还可以通过指定哈希分区个数来建立哈希分区表。
CREATE TABLE sales02(
sales_id INT,
saleman CHAR(20),
saledate DATETIME,
city CHAR(10)
)
PARTITION BY HASH(city)
PARTITIONS 4 STORE IN (ts1, ts2, ts3, ts4);
达梦数据库- 三级分区表:
例 7 创建一个三级分区,更多级别的分区表的建表语句按照语法类推。
CREATE TABLE STUDENT(
NAME VARCHAR(20),
AGE INT,
SEX VARCHAR(10) CHECK (SEX IN ('MAN','FEMAN')),
GRADE INT CHECK (GRADE IN (7,8,9))
)
PARTITION BY LIST(GRADE)
SUBPARTITION BY LIST(SEX) SUBPARTITION TEMPLATE
(
SUBPARTITION Q1 VALUES('MAN'),
SUBPARTITION Q2 VALUES('FEMAN')
),
SUBPARTITION BY RANGE(AGE) SUBPARTITION TEMPLATE
(
SUBPARTITION R1 VALUES LESS THAN (12),
SUBPARTITION R2 VALUES LESS THAN (15),
SUBPARTITION R3 VALUES LESS THAN (MAXVALUE)
)
(
PARTITION P1 VALUES (7),
PARTITION P2 VALUES (8),
PARTITION P3 VALUES (9)
);
本例子中各分区表的表名详细介绍如下:
DM8达梦数据库:达梦数据库分区表相关推荐
- 达梦dm8可视化工具_DM8(达梦8)数据库安装和使用
达梦8(DM8)数据库入门及使用 to 达梦大学 刘秀君原创,抄袭必究 目录 1 介绍 武汉达梦数据库有限公司成立于2000年,为中国电子信息产业集团(CEC)旗下基础软件企业,专业从事数据库 ...
- 达梦数据库DM8(一):新建数据库实例
目录 第一步:找到DM数据库配置助手,并单击打开 第二步:选择创建数据库实例,点击开始 第三步:根据步骤提示,完成数据库相关配置 ① 创建数据库模板 ② 指定数据库目录 ③ 数据库标识 ④ 数据库文件 ...
- 国产化达梦数据库数据迁移文档:oracle11g数据库转达梦8数据库实例演示
Oracle 数据库转达梦数据库实例演示 第一章:达梦数据库用户数据准备 ① 直接执行 sql 语句创建用户(该步执行完可直接第二章) ② 使用工具创建用户 第二章:达梦数据库转库 oracle 转达 ...
- 浅谈达梦数据库与ORACLE数据库差异点及常用SQL总结
一.通过近一周的达梦DCA课程培训让我对达梦数据库有了大概的认识,因为原来用oracle较多,达梦数据库是对标oracle的,所以上手还算顺利.下面我就个人了解的情况浅谈下两者的区别. 1.在使用体验 ...
- 达梦(DM)数据库认证管理员培训记录
最近参与了达梦数据库DCA的培训,也就是达梦数据库认证管理员,现将学习总结分享与此. 一.培训的方式 QQ群线上视频直播培训 二.培训时间 2020-18期 7月6-8日 3天 三.培训内容 DM产 ...
- 初学者必看篇之国产数据库---达梦
初学者必看篇之国产数据库-达梦 需要了解的可以点进去看看----达梦官网 首先,写这篇文章的目的是为了把学到的新知识做个总结梳理,同时我也希望在学习的过程中把一些需要注意的细节和大家分享,正所谓,共同 ...
- 达梦数据库管理员每日数据库巡查清单
达梦数据库管理员每日数据库巡查清单 做为一名达梦数据库管理员,要总结和制定日常工作中数据库管理.监控的思路.方法和具体细节,每日对数据库进行巡查,可以及时发现存在问题.通过巡查工作清单,掌握达梦数据库 ...
- 达梦数据库、oracle数据库如何判断指定表有没有建立索引?对应的表有没有索引查询方法
sm_appmenuitem 这个演示表有 5 个索引. 我在不知道的情况下想知道这个表的索引有没有建成功,或者说我现在想知道这个表的索引有哪些,就要来查询了. 索引表查询方法如下,把对应的表放到括号 ...
- 78 岁华科教授逐梦 40 载,国产数据库达梦冲刺 IPO
国产数据库或将迎来第一股. 整理 | 苏宓 出品 | CSDN(ID:CSDNnews) 2022 年 6 月 29 日,武汉达梦数据库股份有限公司(以下简称"达梦数据")正式递交 ...
- 达梦DM装完数据库,bin下面没有disql文件是怎么回事?
达梦DM装完数据库,bin下面没有disql文件是怎么回事? 装完数据库bin目录下没有Disql 原因:是因为安装的时候未选择数据库服务组件,所以只有客户端组件,不包含相关的dm命令行工具 解决: ...
最新文章
- 图解字符串的朴素模式匹配算法
- axios delete有请求体吗_关于axios请求——delete方法
- Gitlab自动触发Jenkins构建打包
- 栈和递归的关系 144:Binary Tree Preorder Traversal
- HDU4859 海岸线(最小割)
- python下载文件保存_从URL下载文件并将其保存在Python文件夹中
- perl hash array 嵌套 push
- 随想录(rt-patch和linux)
- 做基础产品的体会【转载】
- Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core“
- 拓端tecdat|R语言阈值模型代码示例
- oracle 创建表同时添加注释
- 软考-软件设计师持续更新
- Frida Hook 常用函数、java 层 hook、so 层 hook、RPC、群控
- 机器学习:混淆矩阵、准确率、错误率、灵敏度、特异度、精准率、召回率、F-Measure、ROC曲线 PR曲线
- 冬虫夏草之技术路线图之二【“术”——业务篇】
- UI设计师必备素材|功能性UI线性图标
- 交换机和路由器的关系
- Python的turtle模块画爱心箭(附源码)
- matlab矩阵生成与编辑方法