数据库表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库表相关的知识,希望对你有一定的参考价值。

--数据库表
1.堆组织表(Heap Organized Tables)——这是一种“规范”标准的数据库表。数据以一种堆的方式
管理,当增加数据时,将使用在段中找到的第一个适合数据大小的空闲空间。当数据从表中删除时,
留下的空间允许随后的 INSERT 和 UPDATE 重用。由于像这样引用表,这就是名字“堆”的起源。“堆”
就是一片空间,并且以某种随机的方式使用。
2.索引组织表——这里表存储在索引结构中,利用行本身物理排序。在堆中,数据可能被填到任
何合适的地方;在索引组织表中,根据主关键字,以排序顺序来存储数据创建时加organization index
3.聚簇表——这种表完成了两件事情,第一,许多表物理上连接在一起存储。通常,希望数据在
一个数据库块上的一张表里。对于聚簇表,来自许多张表的数据可能被存储在同一个块上;第二,包
含相同聚簇码值的所有数据将物理上存储在一起。数据“聚集”在聚簇码值周围,聚簇码用 B*Tree
索引构建。
4.散列聚簇表——和上面的聚簇表相似,但是不是使用 B*Tree 索引由聚簇码定位数据,散列聚簇
把码散列到簇中,来到达数据所在的数据库块。在散列聚簇中,数据就是索引(比喻的说法),这适用
于经常通过码等式来读取的数据。
5.嵌套表——对 Oracle 来说这是对象关系扩展的一部分。由系统产生的,并且以父/子关系维持子
表,工作方式就像 SCOTT 模式中的 EMP 和 DEPT 一样。由于 EMP 表有一个外码 DEPTNO,指向 DEPT,
所以主要的区别是它们不是像 EMP 的“单独”表。
6.临时表——这些表存储事务或会话过程中的暂存数据。这些表分配临时区域作为用户临时表空
间。每个会话只能看到所分配的区域,而不能看到由其他会话创建的数据。
7.对象表——这些表是根据对象类型创建的,有特殊属性并且和非对象表不关联。非对象表,例
如,系统对每行产生的 REF(对象标识符)。对象表是堆组织表、索引组织表和临时表的特例,并且也
可能包括嵌套表作为结构的一部分。

--高水平线
如果把—张表想象成“水平”结构,一系列的块从左向右并排,成一条直线放置,高水标记(high water mark)就是曾经包含数据的最右边的块。
--自由列表(FREELIST) 在表中开行插入数一样多的 FREELIST 来提高并行性能
自由列表(FREELIST)在 Oracle 中用来跟踪高水标记以下有空闲空间的块对象。
--PCTFREE(10%) 和 PCTUSED(%40%)
这两个设置来控制块何时增加和撤消 FREELIST
·PCTFREE——用来在 INSERT 过程中测量一个块中数据已占用的比例。
·PCTUSED——用来测量在再次插入行之前一个块应该有多空。
--行迁移
这就是行迁移,是指一行必须离开插入块,移动到其他块上。 --dbms_space.free_block/unused_space();
1.高 PCTFREE,低 PCTUSED——用于插入许多将要更新的数据,并且更新经常会增加行的大小。
这样插入后在块上保留了许多空间(高 PCTFREE),在块返回到自由列表之前,块必须几乎是空的(低
PCTUSED)。
2.低 PCTFREE,高 PCTUSED——用于倾向于对表只使用 INSERT 或 DELETE,或者如果要
UPDATE,UPDATE 也只是会使行变小。
--INITIAL, NEXT 和 PCTINCREASE
在没有使用局部管理表空间的情况下,建议总是设置 INITIAL=NEXT 和 PCTINCREASE 等于
ZERO。这样可以模拟局部管理表空间的使用。为了避免碎片,所有在表空间中的对象应该使用相同
盘区的分配策略。

--Heap Table和索引组织表的区别
Heap Table是我们在Oracle中最常使用的数据表,也是Oracle的默认数据表存储结构。在Heap Table中,数据行是按照“随机存取”的方式进行管理。从段头块之后,一直到高水位线一下的空间,Oracle都是按照随机的方式进行“粗放式”管理。当一条数据需要插入到数据表中时,默认情况下,Oracle会在高水位线以下寻找有没有空闲的地方,能够容纳这个新数据行。如果可以找到这样的地方,Oracle就将这行数据放在空位上。注意,这个空位选择完全依“能放下”的原则,这个空位可能是被删除数据行的覆盖位。IOT对于主键的设置格外严格,要求创建表的时候就必须指定明确的主键列。

Heap Table的索引路径伴随着两次段结构的读取——索引段和数据段。先读取索引段段头,经历根节点、分支节点、叶子节点,最后获取到结果集合rowid列表。之后进行回表操作,使用rowid依次查询数据表的行。

但是IOT表可以不同。索引和数据保留在一起,理论上拿到了叶子节点,也就是拿到了数据行。IOT是不存在回表操作的,所以相对heap table来说,回表部分成本是节省的。
--嵌套表=
有两种方法使用。一种方法是在 PL/SQL 代码中作为扩展 PL/SQL 语言 。
第二种方法是为了持久地存储集合,把嵌套表作为物理存储机制。
--对象表
对象表用来在 Oracle 中执行对象关系模型。个个对象表一般能创建许多物理数据库对象,并且在
模式中增加额外列来管理一切。有许多和对象表相关的“不可思议”的事情,对象视图允许利用“对
象”的语法和语义,同时通过数据的物理存储保持完全控制,并且允许对潜在数据的访问。在这种方
式下,在关系和对象关系世界中都可以完成得最好。

以上是关于数据库表的主要内容,如果未能解决你的问题,请参考以下文章

数据库的多表连接查询 emp表,dept表,salgrade表

oracle数据库,表空间和表之间是啥关系

oracle数据库中表空间和表之间的关系是怎么样的

SQL数据库中表与表之间的关联怎么建立

数据结构线性表之实现单链表

Oracle表空间的概述