现在的位置: 首页 > 综合 > 正文

基础学习–表的分类及特点(二)

2013年10月14日 ⁄ 综合 ⁄ 共 2274字 ⁄ 字号 评论关闭

author:skate

time:2010-04-19


表的分类及特点

 

我们大多系统只适用oracle的两种数据结构:分别是堆表和B*树索引,如果系统没有使用IOT或群,表示对数据优化访问没有进行充分的考虑。

 

1.       堆组织表(heap-organized table

这是一种标准的数据库表,这种表的管理方式类似堆的管理,在增加数据时,在使用段中找到适合数据的可用空间;在删除数据时,在使空间可供后续更新和插入使用,堆是一连串的空间,这些空间以某种随机的方式使用。

 

2.       B*树索引集群表(B* Tree index clustered table

这种类型的集群表的主要完成两件事,一件是许多表可以物理的存储在一起。一般来说,来自同一个表的数据可以期望在一个数据块找到,利用集群表,可以让来自不同的表里数据一起存储在相同的数据块里。第二件是包含相同群键值的所有数据将物理的存储在一起,这些数据围绕群键值集群。群键利用B*树索引构造

所有表共享一个群键索引这一事实表示减少了索引的需要(散列群完全消除了对索引的需求,因为数据就是索引)。因为把数据存储在一起和共享群键索引可以有效的减少物理io,甚至减少逻辑io从另一个角度说,也提高所需块的有效性(eg:本来需要10个块的提供,现在只需要2个块提供),这样也就自然提高了高速缓存的效率,可以使高速缓存缓存更多有效的块 群存在的连个基本限制:

l         不能进行群的直接路径装载

l         不能分区集群表

   Oracle的数据库字典表主要是以群存放的(B*树群)

 

3.       散列集群表(hash-clusterd table)

这种类型的表类似B*树索引集群表,但不使用B*树索引按群键定位数据,散列群是使用散列算法把群键转化为数据块的地址,然后通过这个块地址查找数据,散列群跳过了除块读取外的所有io,这里的数据类似索引。散列表适合用在通过键的相等比较读取数据的时候。有两种类型的散列表,分别是单表和多表的散列群

 

4.       索引组织表(index-organized table(IOT))

这种表存储在索引结构中,他利用行的自身物理顺序。与堆不一样,堆中的数据是放在任何适合它的地方,而在IOT中,数据以根据主键来排序的次序存放。所以会影响插入的速度

 

5.       外部表(external table)

这种类型的表是oracle9i R1的新类型,它提供了将数据存储在oracle数据库的外部,不能修改这表的中数据,只能查询表中的数据,而且还不能像通常那样索引他们

 

 

集群表的共性是数据的集群存储,提供了数据预链接的作用,减少物理io的消耗。分为B*树索引集群表和散列集群表,这两个表的不同点是:

 

l         B*树索引集群表用传统的B*树索引来存储一个键值和可找到数据的块地址,它非常像表上的索引,通过群键索引查找键值,找到数据所在的块地址,然后在其上查找数据。

l         散列表是用散列算法将键值转化为数据的块地址,从避免额外的io,直接读取数据块,数据自身就相当于索引。

 

集群表的优点:

l         物理集中放置数据

l         提高缓冲区高速缓存效率

l         加少物理io,甚至减少逻辑io

l         减少索引的需求,B*树索引集群表共享一个群键索引,而散列集群表的数据将相当于索引

 

群的缺点:

l         要仔细考虑设置合适的群尺寸,设置size值过大会浪费空间,设置过小不能体现群的主要好处(数据的集中存储),如果要更改size不合理的群,需要重建群。

l         必须控制和可控制对群的插入,否则会影响群的效果

l         集群表的插入要比堆表慢,因为数据必须进入适当的位置,而堆表可以在任何可以放入数据的地方添加数据,不需要将数据努力的保存在某个地方。这样并不是说集群表就不适合读写程序

 

索引组织表(IOT

IOT用类似B*树的存储方法,在IOT中数据是按主键有序的存储在B*树索引结构中,而堆组织表是以一种无序的集合存储。与B*索引不同的是,在IOT的每个叶节点既有每行的主键值,又有那些非主键列值,即IOT是把数据和一个主键值物理的存储在一起。而普通表的索引只会对索引列索引,在索引结构中不包含非索引列的信息。

 

 

 

IOTB*树群有如下不同点:

 

l         存在一个数据结构,一个索引结构。而B*树群有一个索引和数据项

l         存储是主键排序存储的,而B*树群是按键值存储,但并不按键值排序

l         设置IOT的尺寸要比设置集群表容易,不用像其群表那样估算键(size)的最大数目

l         IOT除了具有集群表所有的优点,他还有一些特有的优点。索引是相当复杂的结构,它具有到处移动行的能力(集群表不能),允许更好的将相关的数据集中在一起存储。插入顺序是群要考虑的主要因素,IOT不需要考虑。

l         IOT表可以在线联机重建或重组

 

IOT也存在一些缺点

与群表一样,插入速度要比普通表慢,因为数据要装入特定的位置;它比较适合行比较小的表,行大了容易溢出段

 

IOT适用的环境:

 

1.表的全部列或大多数列为索引

2只会通过主键来访问一个表

3希望数据以特定的顺序物理存储

4希望某些数据物理地存储在同一处

5 经常在一个主键或唯一键上使用between查询,用IOT比较提高性能

 

 

Oracle的外部表一般用于数据装载和重装,把它单拿出来,哪天具体的学习下。

 

 

----end---

抱歉!评论已关闭.