各种类型的段以及段中存储子句的优先级

一、段是在数据库中占用磁盘空间的对象。这些段使用数据库的数据文件中的磁盘空间。段的分类:

1、表:oracle规定一个表中的所有数据必须存放在一个表空间中,不能跨越表空间。

2、分区表:当一个表的规模很大并且操场频繁时可以把表划分为若干个分区,每一个分区为一个存储数据的段,每个段的存储参数可以自己定义。可以把每个分区放到不同的磁盘上以提高并行操作的能力,从而达到改进系统效率的目的。

3、索引:如果一张表有5个索引那么就会有5个相应的索引段。基于某个特定索引的所有索引记录都存放在一个索引段中

4、簇(cluster):oracle会将相同簇号的数据行(即使是不同的表)也存放在同一个数据块中或者相邻的数据块中。这样在进行数据表的连接操作时,oracle就可以快速的把相同簇号的行数据连接在一起。

  注:尽量避免使用cluster,可以减少管理和维护的负担,使跨平台的IT移植变得更加容易。

5、索引分区:当在一张表上创建索引时,这个索引可能很大,所以可以像分区表那样将该索引划分为若干个分区,每个索引分区为一个独立的段。这样一个索引可以分布在不同的表空间上,但是每个索引分区段必须存储在一个表空间上。引入分区的目的主要是减少输入输出的竞争。

6、索引表:在索引树的叶子结点中的数据行的地址部分存储真正的数据,这种存储结构称为索引表。索引表可以加快基于索引关键字的查询,但是这种存储结构不适合DML操作非常频繁的表。

7、临时段:当sql中使用了order by group by distinct等关键字时。oracle服务器就试着在内存中进行排序。如果内存中排不下就把中间结果写到磁盘上,该磁盘区就是临时段。

8、还原段:用来存放事务对数据库所做的改变。在对任何数据块或索引块的数据做改变之前,所有的原始值都存放在还原段中。这样不但可以允许用户还原所做的操作而且还可以允许在一个进程对数据进行dml操作时,另外一个进程对原始数据进行读操作(读的是存放在还原段中的原始值)

9、大对象段:在表中只包含一个指向大对象段的指针。

10、嵌套表:表中表。被嵌套的表单独存放在一个段中。尽量避免使用嵌套表,降低数据库的维护负担,提高跨平台的可移植性。

11、自举段:自举段是在创建数据库时由sql.bsq脚本创建的,被称为高速缓存段。该段在实例打开数据库时帮助初始化数据字典高速缓存区,不能对自举段进行任何的查询和修改操作。dba也无需对该段做任何的维护。

二、段中存储子句的优先级:

段所定义的存储参数>表空间一级定义的存储参数>oracle系统默认的存储参数

存储子句在段一级说明以控制区段在段中的分配,其分配原则如下;

1、段一级的参数设置覆盖表空间一级的参数设置但是表空间一级的minimum extent 和uniform size除外

2、段中无该参数时使用tablespace中的参数

3、tablespace无参数时使用系统默认的参数

4、如果在tablespace一级定义了minimum extent那么他将影响到该表空间的所有段的区段的分配。

5、某些存储参数不能在tablespace一级定义,只能在segment一级说明

6、如果对存储参数进行了修改,新的存储参数只适用于还没有分配的区段。

原文地址:https://www.cnblogs.com/moonfans/p/3828336.html