所谓分区是指把一张表和索引划分为若干小块, 在创建表的结构时应该考虑好分区方案, 选择表中某一列或多列数据作为关键字,
该关键字决定哪些数据分到哪些区, Oracle对分区进行管理, 插入数据自动存储到相应的分区.
可以分区的数据类型: number , date , varchar2 , char
1. Oracle的表分区种类:
1. 范围分区
1. 对表进行单列范围分区
例子:
CREATE TABLE emp
(
id NUMBER(10),
name VARCHAR2(10),
salary NUMBER(10)
)
PARTITION BY RANGE(salary)
(
PARTITION p1 VALUES LESS THAN(4000) TABLESPACE myspace,
PARTITION p2 VALUES LESS THAN(9000) TABLESPACE myspace2
);
查看表的分区信息
SELECT table_name,partition_name,tablespace_name FROM user_tab_partitions;
插入数据
INSERT INTO emp VALUES(1,'马雪',3500);
INSERT INTO emp VALUES(2,'李涛',2000);
INSERT INTO emp VALUES(3,'李白',4000);
INSERT INTO emp VALUES(4,'王浩',5000);
按分区查询
SELECT * FROM emp PARTITION(p1);
SELECT * FROM emp PARTITION(p2);
单独对 分区执行 truncate 操作
ALTER TABLE emp TRUNCATE PARTITION p2;
2. Hash 分区
Hash 分区是根据hash 算法来计算具体某条记录应该插入到哪个分区中,
例子:
DROP TABLE emp;
CREATE TABLE emp
(
id NUMBER(10),
name VARCHAR2(10),
salary NUMBER(10)
)
PARTITION BY HASH(id)
PARTITIONS 2
STORE IN (myspace,myspace2);
插入数据
INSERT INTO emp VALUES(1,'马雪',3500);
INSERT INTO emp VALUES(2,'李涛',2000);
INSERT INTO emp VALUES(3,'李白',4000);
INSERT INTO emp VALUES(4,'王浩',5000);
查看表的分区信息
SELECT table_name,partition_name,tablespace_name FROM user_tab_partitions;
按分区查询 sys_p1 , sys_p2 是系统自动产生的分区名称
SELECT * FROM emp PARTITION(sys_p1);
SELECT * FROM emp PARTITION(sys_p2);
3. 复合分区
将前面两种分区综合的方法
例子:
DROP TABLE emp;
CREATE TABLE emp
(
id NUMBER(10),
name VARCHAR2(10),
salary NUMBER(10)
)
PARTITION BY RANGE(salary)
SUBPARTITION BY HASH(id)
SUBPARTITIONS 2
(
PARTITION p1 VALUES LESS THAN(4000) TABLESPACE myspace,
PARTITION p2 VALUES LESS THAN(9000) TABLESPACE myspace2
);
插入数据
INSERT INTO emp VALUES(1,'马雪',3500);
INSERT INTO emp VALUES(2,'李涛',2000);
INSERT INTO emp VALUES(3,'李白',4000);
INSERT INTO emp VALUES(4,'王浩',5000);
查看表的分区信息
SELECT table_name,partition_name,tablespace_name FROM user_tab_partitions;
按分区查询
SELECT * FROM emp PARTITION(p1);
SELECT * FROM emp PARTITION(p2);
4. 列表分区
例子:
DROP TABLE emp;
CREATE TABLE emp
(
id NUMBER(10),
name VARCHAR2(10),
salary NUMBER(10),
location VARCHAR2(10)
)
PARTITION BY LIST(location)
(
PARTITION p1 VALUES('北京') TABLESPACE myspace,
PARTITION p2 VALUES('上海', '广东') TABLESPACE myspace2
);
查看表的分区信息
SELECT table_name,partition_name,tablespace_name FROM user_tab_partitions;
插入数据
INSERT INTO emp VALUES(1,'马雪',3500,'北京');
INSERT INTO emp VALUES(2,'李涛',2000,'上海');
INSERT INTO emp VALUES(3,'李白',4000,'上海');
INSERT INTO emp VALUES(4,'王浩',5000, '广东');
按分区查询
SELECT * FROM emp PARTITION(p1);
SELECT * FROM emp PARTITION(p2);
2.分区和可用性、性能的关系
1. 由于数据分区, 硬件故障只影响局部数据.
2. 提高数据查询速度, 可只对特定分区查询. 提供了对大型数据库的数据分散管理能力.
3.本地分区索引、全局分区索引、全局索引