三、段
在数据库中包含了,每个表空间物理上对应着磁盘上的一个或多个数据文件DATAFILE),一个数据文件只能属于一个表空间。每个表空间又有多个段(SEGMENT组成。
(一)、段类型
当建立数据对象(表、索引、簇等)时,Oracle 会自动给这些数据对象分配相应的存储空间,以存放它们的数据信息,这些为数据对象所分配的存储空间被称为段。一个段只能存放在一个表空间上,但是可分布在属于这个表空间中的多个数据文件中。段是由一个或多个区组成的,段的大小是该段所有区大小总和。在 Oracle 数据库中,每个段只属于一个特定的数据库对象(表、索引等),在这个段中至少包含一个区(初始区)。每种数据对象都具有相应的段,Oracle 提供了以下一些段类型:
1)表段(Table):
表是在数据库内存储数据的最常用方法。表段用于存储常规表(非集簇且未分区)的的数据。表段中的所有数据都必须存储在一个表空间内。例如,当在 USERS_DATA 表空上建立表 S_EMP 时,Oracle 会建立名称为 S_EMP 的表段,并且将该表的所有数据存放在USERS_DATA 表空间上。如果表中有 LOB 列或 VARRAY 列,那么该表不会将这些数据列存储在同一个段。
2)表分区段(Table Partition):
表分区主要用于数据仓库应用。当表中包含大量数据且表的并发使用率很高时,可以把一张大表数据划分成几个小的分区,其中每个分区对应于一个段,这种段类型被称为表分段,并且每个表分区段可以存放到不同表空间上。使用表分区可以降低 I/O 次数,提高 /O 性能。表分区后,每个分区都是一个段,可以指定存储参数单独对它们进行控制。假定一张销售表年数据总量达到 10GB,每个季度平均 2.5GB,如果使用普通表存储数据,那么0GB 数据会存放到一个表段中,那么在统计一季度销售数据时需要扫描 10GB 数据;而如果使用表分区段,那么可以将一、二、三、四季度数据分别存放到不同表分区段中,此时统计一季度销售数据只需要扫描 2.5GB 数据。显然,使用表分区段可以大大降低 I/O 次数并提高 I/O 性能。
注意:使用这种类型的段需要在 Oracle9i 企业版内选择分区(Partitioning) 组件
3)簇段(Cluster):
簇与表一样,是一种数据段类型。簇内的行是基于键值存储的,一个簇可以包含一个或多个表,一个簇内所有的表属于同一个段,并且区和块的存储管理方式也完全相同。例如,如果经常要执行主从表之间的连接查询,那么可以将这两张表的数据组织到簇中。簇段的名称与簇名完全相同。注意,当将表放到簇中时,表的数据存放在簇段中,而不会为该表建立专门的表段。假定在 USERS 表空间上建立簇 ORD_ITEM_CLU,并且将表 ORD 和 ITEM 组织到该簇中,此时只会建立簇段 ORD_ITEM_CLU,而不会建立表段