达梦数据库基础知识(十一)管理分区表和分区索引

在大型的企业应用或企业级的数据库应用中,要处理的数据量通常达到TB级,对于这样的大型表执行全表扫描或者DML操作时,效率是非常低的。
为了提高数据库在大数据量读写操作和查询时的效率,达梦数据库提供了对表和索引进行分区的技术,把表和索引等数据库对象中的数据分割成小的单位,分别存放在一个个单独的段中,用户对表的访问转化为对较小段的访问,以改善大型应用系统的性能。
DM提供了水平分区方式。水平分区包括范围、哈希和列表三种方式,企业可以使用合适的分区方法,如日期(范围)、区域(列表),对大量数据进行分区。由于DM划分的分区是相互独立且可以存储于不同的存储介质上的,完全可满足企业高可用性、均衡IO、降低维护成本、提高查询性能的要求。

一、分区的概念
分区是指将表、索引等数据库对象划分为较小的可管理片段的技术,每一个片段称为分区子表或分区索引。一个表被分区后,对表的查询操作可以局限于某个分区进行,而不是整个表,这样可以大大提高查询速度。
DM支持对大表进行水平分区。例如,通讯公司将用户通话记录保存在一张表中,一年这个表产生40GB的数据。假设要对用户的通话信息按照季度进行统计,那么这样的统计需要在全表范围内进行。如果对表按季度进行水平分区,那么每个分区的大小平均为10GB左右,这样在进行统计时,只需在10GB的范围内进行即可。
DM采用子表方式创建分区表,分区表作为分区主表,而每一个分区以一个子表实体存在,即每一个分区都是一个完整的表,一般命名为主表名_分区名。对于水平分区,子表跟主表具有相同的逻辑结构,即分区子表与分区主表有相同的列定义和约束定义。在DM分区表中,主表本身不存储数据,所有数据只存储在子表中,从而实现不同分区的完全独立性。水平分区子表删除后,会将子表上的数据一起删除。
由于每一个分区都以一个子表作为实体,那么不同分区可以存储于相同表空间,也可以位于不同的表空间中。将这些分区放在不同的表空间中具有以下的好处:

  1. 减少所有数据都损坏的可能性,一个表空间损坏不影响其他表空间,提高可用性;
  2. 恢复时间大大减少;
  3. 可以将同一个表中的数据分布在不同的磁盘上,从而均衡磁盘上的I/O操作;
  4. 提高了表的可管理性、可利用性和访问效率。
    分区操作对现存的应用和运行在分区表上的标准DML语句来说是透明的。但是,可以通过在DML中使用分区子表名字来对应用进行编程,使其充分利用分区的优点。

二、分区的方法
达梦数据库DM支持对表进行水平分区。对于水平分区,提供以下分区方式:

  1. 范围(range)水平分区:对表中的某些列上值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上;
  2. 哈希(hash)水平分区:通过指定分区编号来均匀分布数据的一种分区类型,通过在I/O设备上进行散列分区,使得这些分区大小基本一致;
  3. 列表(list)水平分区:通过指定表中的某个列的离散值集,来确定应当存储在一起的数据。例如,可以对表上的status列的值在(‘A’,‘H’,‘O’)放在一个分区,值在(‘B’,‘I’,‘P’)放在另一个分区,以此类推;
  4. 多级分区表:按上述三种分区方法进行任意组合,将表进行多次分区,称为多级分区表。

三、创建水平分区表
在创建表的语法中,使用partition子句指定分区方式和分区列,以及分区的名字等信息,即可创建分区表。而分区子表可以指定storage子句,设置子表的存储属性,如所属表空间等;如果不指定,则继承分区主表的存储特性及表的其他属性。同时,支持多级分区表。
水平分区表的ROWID与其主表属性一致:LIST表的水平分区表的ROWID是物理的;普通表的水平分区表的ROWID是逻辑的,且每个子表的ROWID都是从1开始增长,但是最终返回前,ROWID的高字节会补充上子表序号。
1、创建范围分区表
范围分区是按照某个列或几个列的值的范围来创建分区,当用户向表中写入数据时,数据库服务器将按照这些列上的值进行判断,将数据写入相应的分区中。
在创建范围分区时,首先要指定分区列,即按照哪些列进行分区,然后为每个分区指定数据范围。范围分区支持MAXVALUE范围值的使用,MAXVALUE相当于一个比任何值都大的值。范围分区非常适用于数据按时间范围组织的表,不同的时间段的数据属于不同的分区。
例如,以下语句创建一个范围分区表callinfo,用来记录用户的2010年的电话通讯信息,包括主叫号码、被叫号码、通话时间和时长,并且根据季度进行分区。
CREATE TABLE callinfo(
caller CHAR(15),
callee CHAR(15),
timeDATETIME,
durationINT
)
PARTITION BY RANGE(time)(
PARTITION p1 VALUES LESS THAN (‘2010-04-01’),
PARTITION p2VALUES LESS THAN (‘2010-07-01’),
PARTITION p3 VALUESLESS THAN (‘2010-10-01’),
PARTITION p4 VALUES EQU OR LESS THAN (‘2010-12-31’) --'2010-12-31’也可替换为MAXVALUE
);
值得注意的是,MAXVALUE之间无法比较大小。如下所示:
crea

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值