表类型详解程序员

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

(0)
上一篇 2021年7月17日
下一篇 2021年7月17日

相关推荐

发表回复

登录后才能评论