概念
当表中数量不断增大时,查询速度很很慢,这时候应该考虑对表进行分区
表分区之后逻辑上还是一张完整的表,只是将表中数据在物理上存放到多个位置上,这样在查询时不至于每次都扫描整张表
优点
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)组合分区
即是上面三种分区的组合