对于分区表的理解
1. 了解一下表分区 和 分区表的区别
表分区是一种数据库的优化思想,而分区表是表分区的一种体现.
分区表一般在数据库数据巨大时使用,如一张表的数据已经达到了一个G.
2. 分区表分为两种
a. 垂直分区 : 将一张表的所有字段拆分成多个较少的字段的表以减少单表的数据量来提升速度.
b. 水平分区 : 就是将表的条数按照一定的规则来区分成多个表,一般按时间来区分.
3. 按时间创建分区表
create table t_test (
pk_id number(30) not null,
add_date_time DATE,
constraintPK_T_TEST primary key (pk_id)
)
PARTITION BY RANGE (add_date_time)
(
PARTITIONt_test_2013_less VALUES LESS THAN (TO_DATE('2013-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,
PARTITIONt_test_2013 VALUES LESS THAN (TO_DATE('2014-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,
PARTITION t_test_2014VALUES LESS THAN (TO_DATE('2015-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))TABLESPACE TS_MISPS
)
说明: 其中 add_date_time 为分区字段, 每年为一个分区表, 查询的时候要把分区字段加上.
4. 修改分区表
4.1 添加一个新的分区表
alter table t_test add partition t_test_2015 VALUESLESS THAN (TO_DATE('2015-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACETS_MISPS ;
4.2 删除一个分区
alter table t_test drop partition t_test_2014
5. 查看分区表的信息
Select table_name,partition_name,high_value fromdba_tab_partitions where table_name='T_TEST';
6. 删除数据
使用该分区删除时, 该数据不在该分区将不会被删除.更新一样
delete t_test partition(t_test_2013) where id=1;
ps: 如不适用分区删除时按一般删除来写sql
delete t_test where id=1;
7 . 普通表和分区表互转
- 新建一个和原始表一样字段的分区表作为中间表
- 使用 insert into select 进行导数据
INSERT INTO T_new SELECT field1,filed2, …from T
- 然后先摧毁掉原表或修改表名, 再把新表改为原表的表名.
RENAME T TO T_OLD;