本文内容摘自《收获,不止Oracle》,这确实是一本好书啊。看了好久我才意识到,书中脚本中的 "LJB" ,原来是作者“梁敬彬”的拼音缩写啊。哈哈。。。。。
五种表的优缺点:
表
|
优点
|
缺点
|
普通堆表
(适合大部分
设计场景)
|
1、语法简单方便
2、适用于大部分场景
|
1、表更新日志开销较大
2、delete无法释放空间
3、表记录太大检索较慢
4、索引回表读开销很大
5、即便有序插入,也难以有序读出
|
全局临时表
(尤其适合
接口表设计)
|
1、高效删除
2、产生日志少
3、不同session独立,不产生锁
|
1、语法特别
2、数据无法得到有效的保护
|
分区表
(尤其适合
日志表)
|
1、有效的分区消除
2、高效的记录清理
3、高效的记录转移
|
1、语法复杂
2、分区过多对系统有一定的影响
|
索引组织表
(适合极少更新
的配置表)
|
1、表就是索引,可以避免回表
|
1、语法复杂
2、更新开销较大
|
簇表
(使用频繁关联
查询的多表)
|
1、可以减少或避免排序
|
1、语法复杂
2、表更新开销大
|
一、普通堆表
二、全局临时表
(1)建表语法
例:
①基于会话的全局临时表
create global temporary table T_TMP _SESSION
on commit preserve rows as select * from dba_objects where 1=2;
②基于事务的全局临时表
create global temporary table T_TMP_TRANSACTION
on commit delete rows as select * from dba_objects where 1=2;
三、分区表
原理:不同分区,在不同的 SEGMENT 中
类型: RANGE分区 、 LIST分区、 HASH分区 、 组合分区
建表语法:
例:
(1)范围分区
create table range_part_tab(id number,deal_date date,area_code
number,contents varchar2(4000))partition by range(deal_date)(partition p1 values less than(TO_DATE('2012-02-01','YYYY-MM-DD')),partition p2 values less than(TO_DATE('2012-03-01','YYYY-MM-DD')),. ... ... ..partition p12 values less than(TO_DATE('2013-01-01','YYYY-MM-DD')),partition p_max values less than(maxvalue));
(2)列表分区
create table list_part_tab(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_599 values (599),partition p_other values (DEFAULT));
(3)散列分区
create table hash_part_tab(id number,deal_date date,area_code
number,contents varchar2(4000))partition by hash(deal_date)partitions 12; --指定分区个数
(4)组合分区
范围-列表组合分区:
create table range_list_part_tab(id number,deal_date date,area_code
number,contents varchar2(4000))subpartition by list(area_code)subpartition TEMPLATE( subpartition p_591 values (591),subpartition p_592 values (592),...subpartition p_599 values (599),subpartition p_other values (DEFAULT))(partition p1 values less than (TO_DATE('2012-02-01','YYYY-MM-DD')),partition p2 values less than(TO_DATE('2012-03-01','YYYY-MM-DD')),...partition p12 values less than(TO_DATE('2013-01-01','YYYY-MM-DD')),partition p_max values less than(maxvalue));
四、索引组织表
索引组织表,必须有主键
建表语法如下:
create table iot_addresses
(empno number(10),addr_type varchar2(10),street varchar2(10),city varchar2(10),state varchar2(2),zip number,primary key(empno))organization index
五、簇表
有序簇表可以避免排序
以下是建一个有序簇表的例子
create cluster shc(cust_id number,order_dt timestamp SORT)HASHKEYS 10000HASH IS cust_idSIZE 8192create table cust_orders( cust_id number,order_dt timestamp SORT,order_number number,username number,ship_addr number,bill_addr number,invoice_num number)CLUSTER shc(cust_id, order_dt )