Oracle 索引组织表与标准表

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle 索引组织表与标准表

索引组织表也称为IOT ,索引组织表实际上一个表,不过它的存储结构不像普通的表那样采用堆组织方式,而是采用索引的组织方式。对于普通表而言,其存储结构是将记录无序地存放在数据段中,而索引化组织表是将记录按照某个主键列进行排序后,再以B 树的组织方式存放在数据段中。

由于整条记录都被保存在索引中,所以索引组织表不需要使用ROWID 来确定记录的位置。在索引组织表中只需要知道主键列的值,就能够直接找到相应记录的完整内容。因此,索引组织表提供了快速的、基于主键的对表中数据快速访问。但是,这是以牺牲插入和更新性能为代价的。图9-6所示示意性地列出了索引组织表与标准表之间的区别。

ROWID

普通表索引索引表

主键行头非主键列

图9-6 索引组织表与标准堆表的对比

对于普通表而言,表、索引数据是分别存放在表段、索引段,要占用更多空间;而对于索引表而言,主键列和非主键列的数据都被存放在主键索引段中。当经常要使用主键列定义表数据时,应该建立索引表。使用索引表,一方面降低了磁盘和内存空间占用。另一方面也可以提高访问性能。

建立索引表也是使用CREATE TABLE 语句完成的。需要注意,建立索引组织表时,必须指定ORGANIZATION INDEX 关键字,并且在索引组织表中必须定义主键约束。例如,下面的语句建立一个索引组织的EMPLOYEES 表: SQL> create table employees(

2 empno number(5) primary key,

3 ename varchar2(15) not null,

4 job varchar2(10),

5 hiredate date default (sysdate),

6 sal number(7,2),

7 deptno number(3) not null

8 ) organization index

9 tablespace users;

表已创建。

如果向索引组织表中添加数据,Oracle会根据主键列进行对其排序,然后再将数据写入磁盘。这样在使用主键列查询时,在索引组织表上可以得到更好的读取性能。在标准堆表上进行相同的查询时,需要首先读取索引,然后再判断数据块在磁盘上的位置,最后Oracle 必须将相关的数据块放入内存中。而索引组织表将所有数据都存储在索引中,所以不需要再去查找存储数据的数据块。这样相同的查询,在索引组织表中执行的效率是标准堆表的两倍。

虽然索引组织表的查询执行效率比堆表高,但时索引组织表比堆表更难于维护。当向堆表中添加数据时,Oracle只需要简单地在表的盘区中找到一个可用空间保存数据。而索引组织表由于需要对数据按照B树结构进行组织,所以Oracle要根据所添加数据的主键将数据写合适的数据块。这就不可避免的要在数据块中移动已经存在的行,以提供足够的空间存放新行。

相关文档
最新文档