表设计的知识

普通堆表的不足

 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.分区表的分区可分别指定在不同的表空间里,如果不写即为都在同一默认表空间里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值