表分区:将一个表格的数据,按照不同的特征,分开进行存放和管理

一、表分区的创建方法

create table 表名(

列名 数据类型

)

partition by 分区类型(分区的列名)

(

分区的规则设置

);

分区表格创建的目的:

1. 可以在设置分区的时候,指定每个分区绑定不同的表空间和数据文件,

可以更加精细化的管理每个分区不同的数据

2. 分区可以让我们在搜索分区列的时候,减少数据的搜索量,加快表格查询的速度,减少查询

sql语句消耗的资源

查询所有的分区表和分区信息:

select * from user_tab_partitions;

1.1 散列分区,hash哈希

哈希是一种数据库里面的算法,一般用来处理看不出规律的数据,哈希算法会将所有的数据分别

进行算法计算,将计算结果进行分类。

create table 散列分区表名字(

列名 数据类型

)

partition by hash(列名)

(

partition 分区名 tablespace 表空间名字,

partition 分区名

);

create table hash_emp(

empno number,

ename varchar2(50),

job varchar2(50),

mgr number,

hiredate date,

sal number,

comm number,

deptno number

)

partition by hash(ename)

(

partition p_n1,

partition p_n2,

partition p_n3,

partition p_n4

);

查看某一个分区的数据和内容:

select * from 分区表名字 partition(分区名);

select * from hash_emp partition(p_n4);

1.2 列表分区 list 适用于某个字段含有大量重复信息的列

一般使用在性别、商品分类、地区、部门、岗位......

create table 列表分区的表名(

列名 数据类型

)

partition by list(列表分区的字段名)

(

partition 分区名字 values (分区字段的内容)

);

create table list_emp(

empno number,

ename varchar2(50),

job varchar2(50),

mgr number,

hiredate date,

sal number,

comm number,

deptno number

)

partition by list(deptno)

(

partition p_d10 values (10),

partition p_d20 values (20),

partition p_d30 values (30)

);

1.3 范围分区 range 某个字段是数值或者是时间类型的时候,可以根据数据的范围进行内容和分区的划分

一般使用的字段是 年龄、价格、工资、注册时间...

create table 范围分区的表名(

列名 数据类型

)

partition by range(范围分区的字段名)

(

partition 分区名字 values less than (数值),

.......

partition 分区名字 values less than (maxvalue)

);

create table range_emp(

empno number,

ename varchar2(50),

job varchar2(50),

mgr number,

hiredate date,

sal number,

comm number,

deptno number

)

partition by range(sal)

(

partition p_sc values less than(2001), --0-2000

partition p_sb values less than(3001), --2001-3000

partition p_sa values less than(maxvalue) --所有大于等于3001的

);

使用场景最多的,就是使用时间进行每天分区的划分:

最多的是对数据进行离线的数据处理和计算,采用的是T+1的模式,每一天都会有一个自己的分区去处理和管理每一天独立的数据。

1.4 组合分区 是两两不同的分区类型的组合,父分区+子分区进行搭配的组合形式

create table 表名(

列名 数据类型

)

partition by 父分区分区类型(父分区的字段名字)

subpartition by 子分区分区类型(子分区的字段名字)

(

partition 父分区名字 父分区规则(

subpartition 子分区名字 子分区规则

)

);

--创建一个 用部门列表分区做父分区,用工资范围做子分区

create table zuhe_emp(

empno number,

ename varchar2(50),

job varchar2(50),

mgr number,

hiredate date,

sal number,

comm number,

deptno number

)

partition by list(deptno)

subpartition by range(sal)

(

partition p_10 values(10)(

subpartition p10_c values less than(2001),

subpartition p10_b values less than(3001),

subpartition p10_a values less than(maxvalue)

),

partition p_20 values(20)(

subpartition p20_c values less than(2001),

subpartition p20_b values less than(3001),

subpartition p20_a values less than(maxvalue)

),

partition p_30 values(30)(

subpartition p30_c values less than(2001),

subpartition p30_b values less than(3001),

subpartition p30_a values less than(maxvalue)

)

);

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐