暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

分区表类型和使用场景

原创 陈龙 2019-03-22
1412

问题描述

请问分区表常见的有哪几种类型,以及各自使用的最佳实践。

专家解答

关于分区表:

Ø  hash分区

通常呢,对于那些无法有效划分范围的表,可以使用hash分区,这样对于提高性能还是会有一定的帮助。hash分区会将表中的数据平均分配到指定的几个分区中,列所在分区是依据分区列的hash值自动分配,因此并不能控制也不知道哪条记录会被放到哪个分区,hash分区也可以支持多个依赖列。

 

Ø  list分区

List分区与range分区和hash分区都有类似之处,该分区与range分区类似的是也需要你指定列的值,但这又不同与range分区的范围式列值---其分区值必须明确指定,也不同与hash分区---通过明确指定分区值,能控制记录存储在哪个分区。它的分区列只能有一,而不能像range或者hash分区那样同时指定多个列做为分区依赖列,不过呢,它的单个分区对应值可以是多个。

在分区时必须确定分区列可能存在的值,一旦插入的列值不在分区范围内,则插入/更新就会失败,因此通常建议使用list分区时,要创建一个default分区存储那些不在指定范围内的记录,类似range分区中的maxvalue分区。

 

Ø  rang分区

Range分区呢是应用范围比较广的表分区方式,它是以列的值的范围来做为分区的划分条件,将记录存放到列值所在的range分区中,比如按照时间划分,2008年1季度的数据放到a分区,08年2季度的数据放到b分区,因此在创建的时候呢,需要你指定基于的列,以及区的范围值,如果某些记录暂无法预测范围,可以创建maxvalue分区,所有不在指定范围内的记录都会被存储到maxvalue所在分区中,并且支持指定多列做为依赖列

 

Ø  组合分区

10g中有两种:range-hash,range-list。注意顺序哟,根分区只能是range分区,子分区可以是hash分区或list分区。(因为hash分区不能确定记录会放到哪个分区,所以不能作为根分区)

11g在组合分区功能这块有所增强,又推出了range-range,list-range,list-list,list-hash,这就相当于除hash外三种分区方式的笛卡尔形式都有了。

 

这里简单创建一个范围分区表:

SQL> CREATE TABLE range_example(
        range_key_column DATE,
        DATA VARCHAR2(20),
        ID integer
    ) PARTITION BY RANGE(range_key_column)
    (
        PARTITION part01 VALUES LESS THAN (TO_DATE('2018-07-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE SYSTEM,
        PARTITION part02 VALUES LESS THAN (TO_DATE('2018-08-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE SYSTEM,
        PARTITION part03 VALUES LESS THAN (TO_DATE('2018-09-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE SYSTEM
   );
 
Table created.
最后修改时间:2019-04-14 10:48:53
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论