700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > DM8达梦数据库:达梦数据库分区表

DM8达梦数据库:达梦数据库分区表

时间:2023-09-28 13:33:14

相关推荐

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 "P" VALUES LESS THAN(DATETIME'-01-01 00:00:00'),SUBPARTITION "P" VALUES LESS THAN(DATETIME'-01-01 00:00:00'),SUBPARTITION "P" 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 字段取值范围是[‘-04-01’, ‘-07-01’)。如果通过“VALUES EQU OR LESS THAN”指定上界,即该分区包含上界值

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

例 1 创建一个范围分区表 callinfo,用来记录用户 年的电话通讯信息,包括

主叫号码、被叫号码、通话时间和时长,并且根据季度进行分区。

CREATE TABLE callinfo(caller CHAR(15),callee CHAR(15),time DATETIME,duration INT)PARTITION BY RANGE(time)(PARTITION p1 VALUES LESS THAN ('-04-01'),PARTITION p2 VALUES LESS THAN ('-07-01'),PARTITION p3 VALUES LESS THAN ('-10-01'),PARTITION p4 VALUES EQU OR LESS THAN ('-12-31'));--'-12-31'也可替换为 MAXVALUE

表中的每个分区都可以通过“PARTITION”子句指定一个名称。并且每一个分区都有一个范围,通过“VALUES LESS THAN”子句可以指定上界,而它的下界是前一个分区的上界。如分区 p2 的 time 字段取值范围是[‘-04-01’, ‘-07-01’)。如果通过“VALUES EQU OR LESS THAN”指定上界,即该分区包含上界值,如分区 p4 的 time字段取值范围是[‘-10-01’, ‘-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 ('-04-01',10),PARTITION p2 VALUES LESS THAN ('-07-01',20),PARTITION p3 VALUES LESS THAN ('-10-01',30),PARTITION p4 VALUES EQU OR LESS THAN ('-12-31', 40) );insert into CALLINFO values('CHERRY','JACK','-12-31',40);insert into CALLINFO values('CHERRY','JACK','-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));

本例子中各分区表的表名详细介绍如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。