一:表分区的应用场景
用于管理包含大量数据的表。
二:表分区的优点
1.提高数据的可以性
2.减少管理负担
3.改善语句的性能
三:分区的方式:(区间分区、散列分区、列表分区、组合分区)
1.区间分区(范围分区 range)
创建区间分区的语法:
PARTITION BY RANGE (列名) --range表示分区的方式
(
partition 分区表名 values less than (值)
[ tablespace 表空间]
)
例:按照时间创建表分区。
--创建表时建立分区表 |
2.散列分区(hash):对于那些无法有效的划分范围的表,可以使用hash分区
散列分区语法:
partition by hash()
(
partition 分区表名 tablespace 表空间名
)
例:
--创建表 |
3.列表分区(list):可以将数据按照列的值分类
列表分区语法:
partition by list()
(
partition 分区表名 values(指定值1,指定值2……)
)
[tablespace 表空间名]
例:
CREATE TABLE area
(
CODE NUMBER,
NAME VARCHAR2(20)
)
--创建列表分区
PARTITION BY LIST(CODE)
(
PARTITION p1 VALUES(10,20,30), --指定当code值为10,20,30为第一分区
PARTITION p2 VALUES(40,50,60), --指定当code值为40,50,60为第二分区
PARTITION p_other VALUES(DEFAULT) --其他值为第三分区
) select * from area PARTITION (p1);
select * from area PARTITION (p2);
select * from area PARTITION (p_other);
4.组合分区:就是前三个分区的组合
优势:使分区表更加灵活
(1).区间-散列组合分区语法:
partition by range(列1) subpartition by hash(列2)
(
partition 分区表名 values less than(值)
tablespace 表空间名;
)
(2).区间-列表组合分区语法:
partition by range(列1) subpartition by list(列2)
(
partition 分区表名 values less than(值)
tablespace 表空间名(
subpartition 自分区名 values(列表指定值1……)
tablespace 表空间
)
)
四:分区的维护:(增加分区、删除分区、截断分区、合并分区)
1.增加分区
语法:
ALTER TBALE 表名 ADD PARTITION 分区表名 VALUES LESS THAN(值)
--增加区间分区
ALTER TABLE drawlist ADD PARTITION p3 VALUES LESS THEN to_date('2013-1-1','yyyy-mm-dd') TABLESPACE USERS;
--注意:插入的区间数据值不能小于原有的分区表的值。如果包含了maxvalues,必须删除原有分区表
2.删除分区
语法:
ALTER TABLE 表名 DROP PARTITION 分区表名
--删除区间分区
ALTER TABLE drawlist DROP PARTITION p3
--删除分区表后,分区表中的数据也会一同删除
3.截断分区:删除当前分区中的数据,但是它并不会影响其他分区。
语法:
ALTER TABLE 表名 TRUNCATE PARTITION 已经存在的分区表名
--截断分区表P3,清除分区表中的数据
ALTER TABLE drawlist TRUNCATE PARTITION p3
4.合并分区: --高界限的分区不能合并到低界限的分区中
语法:
ALTER TABLE 表名 MERGE PARTITIONS 分区表1,分区表2 INTO PARTITION 分区表2
--将分区表p1合并到分区表p2
ALTER TABLE drawlist MERGE PARTITIONS p1,p2 INTO PARTITION p2