Oracle数据库表之段

      一. 段类型

      Oracle中的段(segment)是占用磁盘上存储空间的一个对象,不同类型的段存储了不同的数据,管理存储空间的方式也不相同。

      主要几种段类型:

      1. 聚簇:用于存储多个表上的相关数据,将多个表相关联的部分存储到一个数据块上,方便查找与访问。

      2. 表:用于保存一个表的数据,通常与索引段联合使用。最常见的段,用于存储表数据的。

      3. 表分区:用于分区。

      4. 索引:这种段类型可以保存索引结构。

      5. 索引分区:与表分区类似,主要是管理分区表的。

      6. 嵌套表:为嵌套表指定的段类型。

      7. 回滚段:undo数据存储所在地。

      比如:这条sql语句 Create table t ( x int primary key, y clob, z blob ); 会创建6个段。


       1. 表本身是一个段

       2. 主键约束创建了一个索引段

       3. 每一个LOB列分别创建了2个段,一个段用于存储字符大对象(CLOB)或二进制大对象(BLOB)所指的实际数据块,另一个段用于组织这些数据块。

      二. 段空间管理

      管理方式有2种:手动与自动

       三. 高水位线

       高水位线是针对表段而言,表段存储了很多用户数据。把表段想象成从左到右依次排开的一系列块,高水平线(high-water mark,HWM)就是包含了数据的最右边的块,如下图所示:


     上图显示了HWM首先位于新创建表的第一个块中。过一段时间后,随着在这个表中放入数据,而且使用了越来越多的块,HWM会升高。如果我们删除了表中的一 些(甚至全部)行,可能就会有许多块不再包含数据,但是它们仍在HWM之下,而且这些块会一直保持在HWM之下,直到重建、截除或收缩这个对象。

      HWM很重要,因为Oracle在全面扫描段时会扫描HWM之下的所有块,即使其中不包含任何数据。这会影响全面扫描的性能,特别是当HWM之下的大多数块都为空时。

      四. freelists

      freelists 为手动段空间管理时候的一个参数,手动段空间管理也就是手动表空间管理,只有段所在的表空间为手段管理,段空间才为手动管理。在往表段插入数据的时候,会先找freelist,freelist上挂的都是空闲的块,可以被使用。如果只有一个freelist,那么并发的插入,就会性能很差。所以freelist的数量要配置得合适才行。但是,太大了也不行。假如配置了100个freelist,但是最多只可能用到10个。就会浪费许多空间。

       如果采用自动段空间管理,就没有这个问题了,数据库会自动进行设置。

猜你喜欢

转载自liwenshui322.iteye.com/blog/1639641
今日推荐