数据库表

--数据库表
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 中执行对象关系模型。个个对象表一般能创建许多物理数据库对象,并且在
模式中增加额外列来管理一切。有许多和对象表相关的“不可思议”的事情,对象视图允许利用“对
象”的语法和语义,同时通过数据的物理存储保持完全控制,并且允许对潜在数据的访问。在这种方
式下,在关系和对象关系世界中都可以完成得最好。

时间: 2024-09-29 22:55:06

数据库表的相关文章

PowerDesigner生成数据库表和逆向生成表结构(MySQL数据库)

一.Download Connector/ODBC下载ODBC驱动,地址:https://dev.mysql.com/downloads/connector/odbc/, 需要注意:PowerDesigner安装的多少位就下载多少位的,一般是32位,建议下载.msi文件直接安装. 二.安装完成后点击powerdesigner的Database--->Configure Connections...--->添加数据源配置,如下图: 三.PDM模型生成数据库sql文件,点击powerdesigne

数据类与生成数据库表所需组成

Entityframework属于ORM框架,作用为:将数据类与数据库表关联起来. 数据类与生成数据库表所需组成: 普通类(实体类):定义了属性字段+限制 数据上下文类:继承了DbContext,(各实体类的集合).作用:生成数据库和操作数据库. 配置文件中.连接数据库的字符串.注意name必须与数据上下文类的派生类名称相同. 控制器中,数据库上下文类的实例化,然后使用给对象方可生成数据库.

查看和改动MySQL数据库表存储引擎

要做一名合格的程序猿,除了把代码写的美丽外,熟知数据库方面的知识也是不可或缺的.以下总结一下怎样查看和改动MySQL数据库表存储引擎:        1.查看数据库所能支持的存储引擎:show engines;        2.查看某个数据库中某个表所使用的存储引擎:show table status from db_name where name='table_name';(注:将where条件去掉后能够查看某个数据库中全部表的存储引擎情况)        3.改动表引擎方法:alter t

在线数据库表(sql语句)生成java实体类工具

相信每个做java开发的读者,都接触过SQL建表语句,尤其是在项目开发初期,因为数据库是项目的基石. 在现代项目开发中,出现了许多ORM框架,通过简单的实体映射,即可实现与数据库的交互,然而我们最初设计的一定是数据库表结构,而不是实体类.实体类仅仅是对底层数据结构的有损压缩,它仅仅是数据载体,不具备数据归档能力. 因此,很多时候,我们需要将原始的SQL建表语句转换成java实体类,这项工作看似简单,但若人工完成,工作量也是相当可观的,而且难免会出现差错. 到目前为止,笔者还没有发现比较靠谱的此类

mysql 数据库表错误 修复 总结

mysql 数据库坏表修复 萝卜白菜,各有所爱,能干活.能修复表才是王道!!! 修复之前谨记:先备份数据库 (备份完成后再进行以下修复操作) 可以mysqldump -A  > all.sql   进行全库备份  (mysqldump导出错误的时候可以省略错误的表进行导出其他的数据添加选项   --ignore-table=table_name  )  也可以进入到/usr/local/shell/ 执行  mysql_backup.sh进行备份数据库  以上两种方式都不可以备份 可以进入到/d

ORM 实现数据库表的增删改查

这次通过反射技术来实现一下数据库表的增删改查对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping) 注:引用时约束了以下几点: 数据库表的表名与类的类名一致 数据库字段名和类字段名一致 自增字段的访问权限为private其余字段都为public 注:如果用的是MySql数据库,有提供好的MySqlhelper非MySql数据库可以参考我写好的SqlHelper SqlHelper参考位置:http://www.cnblogs.c

数据库表的创建、管理和数据操作(实验一),数据库创建

数据库表的创建.管理和数据操作(实验一),数据库创建 今天我们就以实验的形式对表的创建.管理和数据操作进行学习,上课吧. [实验目的]:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识.[实验要求]:利用SQL语言进行数据库表的各种操作:1.数据库表的创建.修改和删除操作.2.向表中进行数据的插入.删除和修改操作.[实验内容]1. 利用数据定义语句在实验一创建的stu_DB库中建立学生管理系统的三个表:Student.Course.SC.2.利用INSERT.UPDATE和DELE

数据库表的查询操作实践演练(实验三),数据库演练

继前两次的实验,本次实验以熟练掌握利用select语句进行各种查询操作:单表查询.多表连接及查询.嵌套查询.集合查询等,巩固数据库查询操作.下面就跟着小编一起练习吧!在实验一创建并插入数据的表(Student, Course,SC,Teacher,TC)的基础上,完成以下操作.(1)将教师‘罗莉'的名字改为‘罗莉莉'.复制代码 代码如下:update Teacher set tname='罗莉莉' where tname='罗莉'(2)将两个同学(数据自己临时设置,用后即删除)的两门课程的成绩以

数据库表散列

http://dapple.iteye.com/blog/740338 数据库表散列: 思路:1.缩短查询耗时: 2.分拆表或者库,表小,查询自然快: 3.需要快速定位,hash算法可以做到这种(唯一)映射

sql数据库表复制、查看是否锁表

1.不同数据库之间复制表的数据的方法: 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库..表 当目标表不存在时: select * into 目的数据库..表 from 源数据库..表 2. 查看是否锁表 show OPEN TABLES where In_use > 0;