ITPub博客

首页 > Linux操作系统 > Linux操作系统 > IOT表的原理

IOT表的原理

原创 Linux操作系统 作者:linshuze_1977 时间:2013-06-08 10:54:12 0 删除 编辑

索引组织表(IOT表):为什么引入索引组织表,好处在那里,组织结构特点是什么,如何创建,创建IOT的限制LIMIT。

IOT是以索引的方式存储的表,表的记录存储在索引中,索引即是数据,索引的KEY为PRIMARY KEY。数据的查询可以通过查询索引的同时查询到数据,因为索引和数据存储在一个数据块中,减少了一次磁盘I/O。数据是按照主键顺序创建的索引,索引中有对应的数据,这样依据主键做范围扫描时,减少了读取的数据块数量,减少了磁盘I/O。也减少了索引的存储空间,因为索引和数据存在一起。如果是B树索引就需要创建对索引的存储空间。

两个好处:一个是减少了范围扫描的磁盘I/O数据块数(页块中有数据,有索引),一个是避免了索引自身的空间开销,因为索引和数据在一起,不需要额外的空间。这些优点都是索引组织表的特点决定。

何时使用IOT:(1)数据的相关数据片需要存储在一起。(2)数据必须按照指定的顺序物理存储。IOT表多用于信息获取、空间应用和OLAP应用(OLAP:Online-Analysis Process)。

注意:索引组织表的所有优势来自于其结构,即数据在索引中,数据按照主键顺序存储。下面是索引组织表的结构。

重申:IOT按照索引顺序存储,页块中有索引也有数据。所以,对于范围扫描会读取更少的物理数据块。减少物理I/O可以更快的读取数据。

索引组织表的ROW OVERFLOW AREA。行溢出区。

索引组织表是以B-树方式存储的表,显然这种方式在索引页块中存储了更多的数据,如果索引组织表中某行的数据溢出(比如UPDATE了更大字节的列),此时就需要OVERFLOW区。索引组织表中行分成如下部分:

1、  索引实体:所有主键列的列值,指向行的溢出区的物理ROWID,一些非键列(由INCLUDING参数决定)。这个部分存储在索引段中。

2、  溢出部分:剩余非主键列的列值。这部分存储在溢出存储区段。

创建一个索引组织表。

SQL> create table iot_t(

  2  token char(10),

  3  doc_id number,

  4  token_frequency number,

  5  token_offsets varchar2(2000),

  6  constraint pk_iot_t primary key(token,doc_id))

  7  organization index

  8  tablespace idx

  9  pctthreshold 20

10  including token_frequency

11  overflow tablespace users;

Table created.

其中including token_frequency表示列token_frequency之间的非主键的列值和主键存储在一起,其余列的值要存入溢出区,在INDEX实体部分存储了对应行在的溢出区中的ROWID。

二级索引(IOT的)。理解为在索引之上的索引,IOT使用逻辑ROWID,根据主键计算得到的ROWID。

如下是索引组织表DEPARTMENTS在某个块中存储的记录,此时最后一行为location_id。

10,Administration,200,1700

20,Marketing,201,1800

30,Purchasing,114,1700

40,Human Resources,203,2400

如果我们要按照非主键列location_id来范围查找,此时就需要在location_id上创建二级索引,索引结构如下所示。

1700,*BAFAJqoCwR/+

1700,*BAFAJqoCwQv+

1800,*BAFAJqoCwRX+

2400,*BAFAJqoCwSn+

这里的ROWID是逻辑的,它基于该行对应的主键计算得到,所以二级索引最终还是通过主键索引发挥索引的作用。二级索引—IOT的主键(已排序)--行数据。

逻辑ROWID和物理Guesses:IOT的二级索引基于逻辑ROWID,这个ROWID包括物理guess。这个guess是索引创建时刻索引实体对应行的物理ROWID,所以只要实际的数据行没有移动(物理ROWID没有变)通过这个Guess可以找到数据,而不使用主键,但是IOT中行的物理地址会变化,而此时的逻辑ROWID依然有效,它不会根据行的物理地址变化而自动更新,但是它依然是有效地。所以需要一种机制来适应数据行位置的物理变化。--accuracy of physical guesses.

如果使用物理Guess:如果Guess是准确的,数据访问包括一个二级索引扫描和一个包含该行的数据块的磁盘I/O。如果不准确:数据访问包含一个二级索引扫描和获得错误数据的I/O,然后是依据主键的索引组织表的索引唯一扫描。显然主键是不会变的。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26155341/viewspace-763495/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: utlxplan
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2011-08-10

  • 博文量
    2
  • 访问量
    7136

最新文章