常用数据库系统的表类型



2005-4-7 星期四(Thursday) 晴 
数据库表的四种基本类型:
堆组织表、索引组织表、索引聚簇表、散列聚簇表。
设置各种类型的表都是为了加快数据存取的速度。
堆组织表:
堆是一块大的空间,可供随机的存取。所以很容易想到堆组织表是一个大而无序的数据记录行的集合。每一个记录行可以随机的存放在任意一个能容纳它的位置上,记录行的顺序是不可预测的。堆组织表是数据库系统中最原始也是目前最常用的数据表组织形式。
索引组织表:
由于堆组织表中,索引和表是分开维护的;虽然数据库系统保证他们之间的数据一致性,但是分开的索引会产生额外的空间开销。
索引组织表是将数据按照主键顺序排放的。索引组织表的实质上是将数据存放在相应的索引里面,而基表中不存放任何数据。表内数据的idqu操作只是修改相应的索引里面的存储的数据,对基本表没有什么操作。
堆组织表和索引组织表的差别是在DMBS内部对数据表存储实现方式上的差别。对于数据库系统的编程人员来说,对堆组织表操作和对索引组织表操作没有任何的区别。与堆组织表相比,索引组织表减少了数据存储空间上的开销。索引组织表只维护单独一个B树索引,表的数据和对应的索引存储在一起。此外,索引组织表加快了主键上的查询速度。索引组织表的主键与数据存放在一起,减少了磁盘I/O。
在计算机的世界里没有银弹,索引组织表也有一定的缺陷,而这些缺陷中的某些又恰恰是堆组织表可以弥补的。缺陷一,索引组织表的溢出问题,由于数据量加大以后,索引的每个叶节点可能只能包含一条记录行甚至是一条记录行中的一部分数据,这样B树索引的优越性就失去了任何意义。解决办法:设置溢出表空间。当每一行中数据操过指定值时,将该行中非健列的值的剩余数据放到溢出表空间中。缺陷二,堆索引组织表的DML操作比堆组织表的DML操作更容易产生空间碎片。经常对索引组织表进行插入和删除,会由于碎片空间的增多造成查询时I/O次数增加,查询速度下降。解决办法:重构索引或是改用堆组织表。
在Oracle数据库中建立索引组织表很简单,在Manager Console下相应的schema下面选择新建一个数据表,然后在建表窗口的General选项卡里有个Table的标签,选择Organized Using Index就行了。如果需要可以将下面的With Overflow Data Segment选上,就可以将溢出的数据添加到溢出的表空间。用命令脚本创建如下:
create table IOTTEST
(
 ID NUMBER(10) not null,
 NAME VARCHAR2(10) not null,
 constraint ID primary key (ID)
)
organization index;
这个操作除了在schema下面建立一个索引表以外,还会schema下面自动创建一个索引溢出表。但是用Manager Console看不出来,可以用PL/SQL这样的第三方的工具查看到。

索引聚簇表和散列聚簇表:
这两种表都是属于聚簇表。聚簇的基本思想,用通俗的话说就是将相关的数据存储在一起。
聚簇表的基本原理就是对于一组表,使这些表共享某些相同的列,并将相关的数据存储在同一个物理块上,类似与对表在指定列上做了“预连接”。聚簇表的存储方式就好像图书馆把书籍分门别类的存放的道理一样。
索引聚簇表:指定聚簇关键字后,用B树索引组织关键字,所有其它数据聚集在聚簇关键字周围存储。
散列聚簇表:与索引聚簇表不同点在于,定位聚簇关键字的时候不是用B树索引,而是散列函数。
聚簇表的优点:减少磁盘I./O,有利于快速访问数据。
缺点:不适合插入、删除操作过于频繁的表。
在Oracle中建立聚簇表的方式是先要建立一个Cluster,然后在Cluster下面建立表,当然还可以建立聚簇索引。注意聚簇索引和索引聚簇表不是一个东西,索引聚簇表本质上是一个表,只不过用索引的方式组织,而聚簇索引本质上是一个索引。

你可能感兴趣的:(oracle,sql,编程,脚本)