达梦数据库-二级分区表:

创建一个产品销售记录表 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 分区表使用说明:

  1. LIST 分区支持 DEFAULT 关键字的使用,所有不满足分区条件的数据,都划分为 DEFAULT 的分区,但 DEFAULT 关键字需要用户指定,系统不会自动创建 DEFAULT 分区。
  2. LIST 分区范围值不能为 NULL。
  3. LIST 分区子表范围值个数与数据页大小和相关系统表列长度相关,存在以下
    限制:
    a) 4K 页,单个子表最多支持 120 个范围值。
    b) 8K 页,单个子表最多支持 254 个范围值。
    c) 16K 或 32K 页,单个子表最多支持 270 个范围值。
  1. 范围分区和哈希分区的分区键可以多个,最多不超过 16 列;LIST 分区的分区键必须唯一;
  2. 范围分区表使用说明:
  1. 范围分区支持 MAXVALUE 值的使用,MAXVALUE 代表一个比任何值都大的值。MAXVALUE 值需要用户指定才能使用,作为分区中的最大值。
  2. 范围分区的范围值表达式类型应与分区列类型一致,否则按分区列类型进行类型转换。
  3. 对于范围分区,增加分区必须在最后一个分区范围值的后面添加,要想在表的开始范围或中间增加分区,应使用 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达梦数据库:达梦数据库分区表相关推荐

  1. 达梦dm8可视化工具_DM8(达梦8)数据库安装和使用

    达梦8(DM8)数据库入门及使用 to 达梦大学 刘秀君原创,抄袭必究 目录 1     介绍 武汉达梦数据库有限公司成立于2000年,为中国电子信息产业集团(CEC)旗下基础软件企业,专业从事数据库 ...

  2. 达梦数据库DM8(一):新建数据库实例

    目录 第一步:找到DM数据库配置助手,并单击打开 第二步:选择创建数据库实例,点击开始 第三步:根据步骤提示,完成数据库相关配置 ① 创建数据库模板 ② 指定数据库目录 ③ 数据库标识 ④ 数据库文件 ...

  3. 国产化达梦数据库数据迁移文档:oracle11g数据库转达梦8数据库实例演示

    Oracle 数据库转达梦数据库实例演示 第一章:达梦数据库用户数据准备 ① 直接执行 sql 语句创建用户(该步执行完可直接第二章) ② 使用工具创建用户 第二章:达梦数据库转库 oracle 转达 ...

  4. 浅谈达梦数据库与ORACLE数据库差异点及常用SQL总结

    一.通过近一周的达梦DCA课程培训让我对达梦数据库有了大概的认识,因为原来用oracle较多,达梦数据库是对标oracle的,所以上手还算顺利.下面我就个人了解的情况浅谈下两者的区别. 1.在使用体验 ...

  5. 达梦(DM)数据库认证管理员培训记录

    最近参与了达梦数据库DCA的培训,也就是达梦数据库认证管理员,现将学习总结分享与此. 一.培训的方式 QQ群线上视频直播培训 二.培训时间 2020-18期  7月6-8日 3天 三.培训内容 DM产 ...

  6. 初学者必看篇之国产数据库---达梦

    初学者必看篇之国产数据库-达梦 需要了解的可以点进去看看----达梦官网 首先,写这篇文章的目的是为了把学到的新知识做个总结梳理,同时我也希望在学习的过程中把一些需要注意的细节和大家分享,正所谓,共同 ...

  7. 达梦数据库管理员每日数据库巡查清单

    达梦数据库管理员每日数据库巡查清单 做为一名达梦数据库管理员,要总结和制定日常工作中数据库管理.监控的思路.方法和具体细节,每日对数据库进行巡查,可以及时发现存在问题.通过巡查工作清单,掌握达梦数据库 ...

  8. 达梦数据库、oracle数据库如何判断指定表有没有建立索引?对应的表有没有索引查询方法

    sm_appmenuitem 这个演示表有 5 个索引. 我在不知道的情况下想知道这个表的索引有没有建成功,或者说我现在想知道这个表的索引有哪些,就要来查询了. 索引表查询方法如下,把对应的表放到括号 ...

  9. 78 岁华科教授逐梦 40 载,国产数据库达梦冲刺 IPO

    国产数据库或将迎来第一股. 整理 | 苏宓 出品 | CSDN(ID:CSDNnews) 2022 年 6 月 29 日,武汉达梦数据库股份有限公司(以下简称"达梦数据")正式递交 ...

  10. 达梦DM装完数据库,bin下面没有disql文件是怎么回事?

    达梦DM装完数据库,bin下面没有disql文件是怎么回事? 装完数据库bin目录下没有Disql 原因:是因为安装的时候未选择数据库服务组件,所以只有客户端组件,不包含相关的dm命令行工具 解决: ...

最新文章

  1. 图解字符串的朴素模式匹配算法
  2. axios delete有请求体吗_关于axios请求——delete方法
  3. Gitlab自动触发Jenkins构建打包
  4. 栈和递归的关系 144:Binary Tree Preorder Traversal
  5. HDU4859 海岸线(最小割)
  6. python下载文件保存_从URL下载文件并将其保存在Python文件夹中
  7. perl hash array 嵌套 push
  8. 随想录(rt-patch和linux)
  9. 做基础产品的体会【转载】
  10. Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core“
  11. 拓端tecdat|R语言阈值模型代码示例
  12. oracle 创建表同时添加注释
  13. 软考-软件设计师持续更新
  14. Frida Hook 常用函数、java 层 hook、so 层 hook、RPC、群控
  15. 机器学习:混淆矩阵、准确率、错误率、灵敏度、特异度、精准率、召回率、F-Measure、ROC曲线 PR曲线
  16. 冬虫夏草之技术路线图之二【“术”——业务篇】
  17. UI设计师必备素材|功能性UI线性图标
  18. 交换机和路由器的关系
  19. Python的turtle模块画爱心箭(附源码)
  20. matlab矩阵生成与编辑方法

热门文章

  1. 一些英文写作里的常见实验表述(持续更新中)
  2. 物联网模组行业市场空间发展前景
  3. 使用Route-Map过滤BGP的路由
  4. fileinput基本使用
  5. 什么是 RBAC 模型?
  6. 2021-03-16 群辉视频播放器KODI中文设置的教程
  7. Color Finale for Mac破解教程
  8. 《大数据+AI在大健康领域中最佳实践前瞻》---- 连续血糖监测(CGM) 初探
  9. Analysis::compressCTU()
  10. 湖南大学21夏训练三14.A除以B