常见的五张表
1.普通堆表:适合大部分设计场景,有优点也有缺点,需要和其他表设计取长补短
(1)优点
A.语法简单方便
B.适用大部分场景
(2)缺点
A.表更新日志开销大:可在适当场合选择全局临时表
B.delete无法释放空间:可在适当场合考虑全局临时表和分区表
C.表记录太大检索较慢:可在适当场合选择分区表
D.索引回表读开销很大:可在适当场合索引组织表
E.即使有序插入,也难以有序读出:可在适当场合选择簇表
2.全局临时表:尤其适合接口表设计
(基于SESSION:on commit preserve rows;基于事务:on commit delete rows)
(1)优点
A.高效删除
B.产生日志少
C.不同session独立,不产生锁
(2)缺点
A.语法特别
B.数据无法得到有效的保护
3.分区表:尤其适合日志表
(1)优点
A.有效的分区消除
B.高效的记录清除
C.高效的记录转移
(2)缺点
A.语法复杂
B.分区过多对系统有一定的影响
4.索引组织表:适合极少更新的配置表
(1)优点
A.表就是索引,可以避免回表读
(2)缺点
A.语法复杂
B.更新开销较大
语法:create table test (name varchar2(300),id number) organization index;
5.簇表:使用频繁关联查询的多表(1)优点
A.可以减少或避免排序
(2)缺点
A.表更新开销大
更新,删除,插入操作产生的redo日志大小
(1) 创建视图:统计当前session的redo大小
Create or replace view v_redo_size as
select a.NAME,b.VALUE
from v$statname a,v$mystat b
where a.STATISTIC# = b.STATISTIC#
and a.NAME = 'redo size'
(2) 查询当前的v_redo_size视图,并记录下redo大小
Select * from v_redo_size
(3) 执行更新或者删除或者插入操作
(4) 再次查询v_redo_size视图
Select * from v_redo_size;
(5) 第2次的redo大小减去第1次的redo大小就是这次操作产生的redo大小
TABLE ACCESS BY INDEX ROWID(索引回表读):
根据索引来检索记录,会有一个先从索引中找到记录,再根据索引列上的ROWID定位到表中从而返回索引列以外的其他列的动作。
分区表
(1) 分区表的分区可分别指定在不同的表空间里,如果不写即为都在同一默认表空间里
(2) HASH分区的分区个数尽量设置为偶数
分区操作
(1) 分区truncate
SQL>alter table range_part_tab truncate partition p9;
(2) 分区数据转移
SQL>alter table range_part_tab exchange partition p8 with table mid_tables;
(3) 分区切割
SQL>alter table range_part_tab split partition p_max at (to_date(‘2013-02-01’,’yyyy-mm-dd’)) into (partition p2013_01,partition p_max);
At部分说明具体的范围,小于某个指定的值!into 部分说明被分割成2个分区;p_maxàp2013_01和p_max;
(4) 分区合并
SQL>alter table range_part_tab merge partitions p2013_01,p_max into partition p_max;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25269462/viewspace-763789/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25269462/viewspace-763789/