1、堆组织表,就是普通的标准数据库表,数据以堆的方式管理。堆其实就是一个很大的空间,会一种随机的方式管理数据,数据会放在合适的地方。
例如建立一张表
create table t(id int,name varchar2(20));
插入三条记录
insert into t values(1,’a’);
insert into t values(2,’b’);
insert into t values(3,’c’);
之后删除记录b;
delete from t where id=2;
再插入记录d
insert into t(4,’d’);
d记录就可能放在记录b的位置。
2、索引组织表
IOT 就是类似一个全是索引的表,表中的所有字段都放在索引上,所以就等于是约定了数据存放的时候是按照严格规定的,在数据插入以前其实就已经确定了其位置,所以不管插入的先后顺序,它在那个物理上的那个位置与插入的先后顺序无关。这样在进行查询的时候就可以少访问很多blocks,但是插入的时候,速度就比普通的表要慢一些。
适用于信息检索、空间和OLAP程序。
索引组织表的适用情况:
1、 代码查找表。
2、 经常通过主码访问的表。
3、 构建自己的索引结构。
4、 加强数据的共同定位,要数据按特定顺序物理存储。
5、 经常用between…and…对主码或唯一码进行查询。数据物理上分类查询。如一张订单表,按日期装载数据,想查单个客户不同时期的订货和统计情况。
经常更新的表当然不适合IOT,因为oracle需要不断维护索引,而且由于字段多索引成本就大。
如果不是经常使用主键访问表,就不要使用IOT
索引组织表的创建格式如下:
create table indexTable(
ID varchar2 ( 10 ),
NAME varchar2 ( 20 ),
constraint pk_id primary key ( ID )
)
organization index ;式
注意两点:
● 创建IOT时,必须要设定主键,否则报错。
● 索引组织表实际上将所有数据都放入了索引中
3、索引聚簇表,聚簇是指一个或多个表的组。有相同聚簇值的行会相邻的物理存储。oracle数据字典就大量使用这种表,这样可以将表、字典信息存储在一起,提高访问效率。如果数据只要用于读,需要频繁地把一些表的信息连结在一起访问,可以考虑索引聚簇表。但注意:聚簇会导致dml、全表扫描的效率底下,还有就是索引聚簇表是不能分区的。
4、散列聚簇表,类似聚簇表,不使用B*树索引定位数据,而使用内部函数或者自定义函数进行散列,然后使用这个散列值得到数据在磁盘上的位置,散列聚簇是一个高cup、低IO操作,如果经常按hashkey查找数据,可以考虑散列聚簇表。
5、有序散列聚簇表,这种表是10g中新增的,同时兼有索引聚簇表、散列聚簇表的一些特性,使用这个结构是应该考虑散列聚簇表同样的问题,同时要考虑数据的有序到达。
6、嵌套表,嵌套表与传统的父子表模型很相似,但其里面的数据元素是一个无序集,所有数据类型必须相同,很少用嵌套表来存储实体数据,大多数在Pl/Sql代码中使用。
7、临时表,临时表用来保存事务、会话中间结果集。临时表值对当前会话可见,可以创建基于会话的临时表,也可以创建基于事务的临时表。
1)、基于会话的临时表:
createglobal temporary table temp_s(id int,name varchar2(20)) on commitpreserve rows;
2)、基于事务的临时表:
create global temporarytable temp_t(id int,name varchar2(20)) on commit delete rows;
如果应用中需要临时存储一个行集合供其他表处理,可以考虑临时表。
8、对象表,对象表用于实现对象关系模型,很少用来存储数据,可以在PL/SQL用来得到对象关系组件。
9、外部表,外部表可以把一个操作系统文件当作一个只读的数据库表。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/7262.html