普通堆表的不足
1 表更新有日志开销----可在适当的场合选择全局临时表
2 表delete操作有瑕疵----可在适当场合选择全局临时表和分区表
3 表记录太大检索较慢----可在适当场合选择分区表
4 索引回表读开销很大----可在适当场合索引组织表
5 有序插入难有序读出----可在适当场合选择簇表
全局临时表
全局临时表分为两种类型,一种是基于会话的全局临时表,一种是基于事务的全局临时表。
create global temporary table t_session on commit preserve rows as select * from db where 1=2;(基于会话)
create global temporary table t_transaction on commit delete rows as select * from db where 1=2;(基于事务)
两大重要特性
1.高效删除记录:基于会话的全局临时表在session连接退出后,临时表记录自动删除。
基于事务的全局临时表在commit或者session连接退出后,临时表记录自动删除。
2.不同会话独立:不同的session之间对表对操作互不影响。
分区表
类型:范围分区,列表分区,hash分区,组合分区
范围分区:最常见的是按时间列进行分区 如:
create table t(id number,deal_date date,area_code number,contents varchar2(4000))
partition by range(deal_date)
(
partition p1 values less than (to_date('2014-02-01','yyyy-mm-dd')),
partition p2 values less than (to_date('2014-03-01','yyyy-mm-dd')),
partition p3 values less than (to_date('2014-04-01','yyyy-mm-dd')),
partition p4 values less than (to_date('2014-05-01','yyyy-mm-dd')),
partition p5 values less than (to_date('2014-06-01','yyyy-mm-dd')),
partition p6 values less than (to_date('2014-07-01','yyyy-mm-dd')),
partition p7 values less than (to_date('2014-08-01','yyyy-mm-dd')),
partition p8 values less than (to_date('2014-09-01','yyyy-mm-dd')),
partition p9 values less than (to_date('2014-10-01','yyyy-mm-dd')),
partition p10 values less than (to_date('2014-11-01','yyyy-mm-dd')),
partition p11 values less than (to_date('2014-12-01','yyyy-mm-dd')),
partition p12 values less than (to_date('2015-01-01','yyyy-mm-dd')),
partition p_max values less than (maxvalue)
);
以上操作完成列范围分区的分区建表事例,注意5点
1.范围分区的关键字为partition by range ,即这三个关键字表示该分区为范围分区。
2.values less than 是范围分区特定的语法,用于指明具体的范围,比如partition p2 values less than (to_date('2014-03-01','yyyy-mm-dd'))表示小于3月份的记录
3.partition p1 到 partition p_max 表示总共建立了13个分区
4.最后还要注意 partition p_max values less than (maxvalue) 这部分,表示超出这些范围的记录全部落在这个分区中,免得出错。
5.分区表的分区可分别指定在不同的表空间里,如果不写即为都在同一默认表空间里。
列表分区
create table t(id number ,deal_date date,area_code number ,contents varchar2(4000))
partition by list(area_code)
(
partition p_591 values (591),
partition p_592 values (592),
partition p_593 values (593),
partition p_other values (default)
);
以上操作完成列列表分区的分区建表事例,注意5点
1 列表分区的关键字为partition by list
2 不同于之前范围分区的value less than ,列表分区仅需values 即可确定范围,值得注意的是,partition p_591 values (591) 并不是说明取值只能写一个,也可写为多个,比如partition p_591 values (591,592,593)
3 partition p_591 到 partition p_other 表示总共建立了4个分区
4 最后还要注意partition p_other values (default) 这部分,表示不在刚才591到593范围的记录全部落在这个默认分区,避免应用出错。
5.分区表的分区可分别指定在不同的表空间里,如果不写即为都在同一默认表空间里。