一.表分区含义和使用场景
1.1 作用和含义1.2 传统表分区的类型
1.2 .1 范围分区1.2 .2 散列分区1.2 .3 列表分区1.2 .4 复合分区 1.3 11g新增分区
1.3 .1 引用分区
一.表分区含义和使用场景 1.1 作用和含义允许用户将表分成多个分区;
用户可以执行查询,只访问表中特定的分区;
将不同的分区存储在不同的磁盘上,提高访问性能和安全性;
可以独立的备份和恢复每个分区;
1.2 传统表分区的类型 1.2 .1 范围分区以表的一列或者一组列的值的范围分区
语法:
partition by range (列名)( partition 分区1 values less than (范围1), partition 分区2 values less than (范围2), ... [partition 分区n values less than (maxvalue)] );
如:
create table sales( p_id varchar2(10), s_count number ) partition by range (s_count )( partition p1 values less than (1000), partition p2 values less than (2000), partition pn values less than (3000) );
查看表的分区信息:
select * from user_tab_partitions u where u.table_name='SALES';
往分区表插入数据:
查询特定分区数据:
select * from sales partition(p1);
增加分区
alter table sales add partition p4 values less than (maxvalue);
注
允许用户对不具有逻辑范围的数据进行分区;
通过在分区键上执行hash函数决定存储的分区;
将数据平均分布到不同的分区;
如:
create table my_emp(empno number, ename varchar2(10)) partition by hash(empno)(partition p1,partition p2);1.2 .3 列表分区
允许用户将不相关的数据组织到一起;
create table personCity(id number,city varchar2(10))
partition by list (city)(
partition p1 values('开封','商丘'),
partition p2 values('洛阳'),
partition p3 values('许昌'),
partition p4 values('高安')
);
1.2 .4 复合分区
范围分区与散列分区或列表分区的组合
partition by range (列名) subpartition by hash(列名) subpartitions 子分区数量 ( partition 分区1 values less than (范围1), partition 分区2 values less than (范围2), ... [partition 分区n values less than (maxvalue)] );
子分区数量:对于每个分区会有n个子分区
create table student(sno number, sname varchar2(10)) partition by range (sno) subpartition by hash(sname) subpartitions 4 ( partition p1 values less than (1000), partition p2 values less than (2000), partition p3 values less than (maxvalue) );
通过em查看表信息
基于由外键引用的父表的分区的方法,它依赖于已有的父表子表关系,子表通过外键关联到父表,进而继承父表的分区方式而不需要自己创建,子表还继承父表的维护操作。
CREATE TABLE orders
( order_id NUMBER(12),
order_date TIMESTAMP,
order_mode VARCHAR2(8),
customer_id NUMBER(6),
order_status NUMBER(2),
order_total NUMBER(8,2),
sales_rep_id NUMBER(6),
promotion_id NUMBER(6),
CONSTRAINT orders_pk PRIMARY KEY(order_id)
)
PARTITION BY RANGE(order_date)
( PARTITION Q1 VALUES LESS THAN (TO_DATE('01-04-2022','DD-MM-YYYY')),
PARTITION Q2 VALUES LESS THAN (TO_DATE('01-07-2022','DD-MM-YYYY')),
PARTITION Q3 VALUES LESS THAN (TO_DATE('01-10-2022','DD-MM-YYYY')),
PARTITION Q4 VALUES LESS THAN (TO_DATE('01-01-2023','DD-MM-YYYY'))
);
CREATE TABLE order_items
( order_id NUMBER(12) NOT NULL,
line_item_id NUMBER(3) NOT NULL,
product_id NUMBER(6) NOT NULL,
unit_price NUMBER(8,2),
quantity NUMBER(8),
CONSTRAINT order_items_fk
FOREIGN KEY(order_id) REFERENCES orders(order_id)
)
PARTITION BY REFERENCE(order_items_fk);



