概念
当表中数量不断增大时,查询速度很很慢,这时候应该考虑对表进行分区
表分区之后逻辑上还是一张完整的表,只是将表中数据在物理上存放到多个位置上,这样在查询时不至于每次都扫描整张表
优点
1)提高查询速度,可以只对某个分区进行搜索而不是搜索整张表
2)解耦,如果某个分区出现故障,其他分区仍然可以使用
3)维护方便,如果某个分区出现故障,那么只修复该分区即可
4)通过分布存储表数据,可以平衡IO,改善整个系统的性能
分区表的种类
1)范围分区
范围分区是基于范围将数据映射到每个分区,这种分区方式最常用,通常分区键使用日期,当然也可以是其他
例如
按行分区
SQL> CREATE TABLE part_andy1
(
andy_ID NUMBER NOT NULL PRIMARY KEY,
FIRST_NAME VARCHAR2(30) NOT NULL,
LAST_NAME VARCHAR2(30) NOT NULL,
PHONE VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(80),
STATUS CHAR(1)
)
PARTITION BY RANGE (andy_ID)
(
PARTITION PART1 VALUES LESS THAN (10000) ,
PARTITION PART2 VALUES LESS THAN (20000)
);
按时间分区
SQL> CREATE TABLE part_andy2
(
ORDER_ID NUMBER(7) NOT NULL,
ORDER_DATE DATE,
OTAL_AMOUNT NUMBER,
CUSTOTMER_ID NUMBER(7),
PAID CHAR(1)
)
PARTITION BY RANGE (ORDER_DATE)
(
PARTITION p1 VALUES LESS THAN (TO_DATE('2014-10-1', 'yyyy-mm-dd')) ,
PARTITION p2 VALUES LESS THAN (TO_DATE('2015-10-1', 'yyyy-mm-dd')) ,
PARTITION p3 VALUES LESS THAN (TO_DATE('2016-10-1', 'yyyy-mm-dd')) ,
partition p4 values less than (maxvalue)
);
2)Hash分区
通过hash算法计算出某条数据应该放在哪个分区,在oracle如果使用hash分区只需要指定分区的数量即可,一般建议分区的数量是2的n次方,这样数据会更加均匀
--按hash分区
SQL> create table part_andy3
2 (
3 transaction_id number primary key,
4 item_id number(8) not null
5 )
6 partition by hash(transaction_id)
7 (
8 partition part_01 ,
9 partition part_02 ,
10 partition part_03
11 );
3)list分区
创建list分区时需要确定列中可能存在的值,通常在使用list分区时需要创建一个default分区存储那些不在指定范围内的记录
-- 按list分区
SQL> create table part_andy4
2 (
3 id varchar2(15 byte) not null,
4 city varchar2(20)
5 )
6 partition by list (city)
7 (
8 partition t_list025 values ('beijing'),
9 partition t_list372 values ('shanghai') ,
10 partition t_list510 values ('changsha'),
11 partition p_other values (default)
12 );
4)组合分区
即是上面三种分区的组合