我们知道一般的表都以堆(heap)的形式来组织的,这是无序的组织方式。Oracle还提供了一种有序的表,它就是索引组织表,简称IOT表。IOT表上必须要有主键,而IOT表本身不对应segment,表里所有的数据都存放在主键所在的索引的叶子节点里。换句话说,在索引叶子节点里的索引条目里不仅存放了被索引的列的值,还同时存放了其他列的值。
    对于总是通过主键访问数据的表来说,比较适合使用IOT表。如果使用普通表,则通过主键索引访问表时,至少要读取两个数据块:一个索引块,另一个是表的数据块。而如果通过IOT表,由于表的数据就存放在索引块中,所以只需要读取一个块即可。IOT表时虚拟表,但是他具有普通表所有的特性。而且尽管IOT表的数据实际存放在索引segment里,但是我们还是可以在IOT表的基础上,在其他列上再次创建索引,这种索引我们叫二级索引。

使用二级索引查找数据时,存在以下两个阶段:
1,物理猜测:根据二级索引里记录的物理ROWID,去扫描其指向的IOT表所依附的索引segment里的索引节点。
2,逻辑猜测:由于IOT表的数据存放在索引的叶子节点里,而由于在索引里数据都是有序存放的,数据会子会在叶子节点中间插入,因此就存在向叶子节点的拆分问题。一旦叶子节点被拆分,数据所在的索引块就会变化,那么二级索引所指向的位置也就错误了。通过物理ROWID去访问IOT表就找不到数据。这个时候,Oracle会进行逻辑猜测,这时就不使用ROWID了,而是使用主键列的值去扫描IOT表。

创建IOT表的例子如下:
create table iot_test(id number,c1 varchar2(40),c2 varchar2(40),c3 varchar2(40),c4 varchar2(40),primary key(id))
organization index
tablespace indx
pctthreshold 10
including c2
overflow tablespace users;

我们定义的IOT表时,必须创建一个主键约束,然后指定organization index选项,可以同时指定主键对应的索引所在的表空间名称。从上面的例子中,假设经常访问的列id和c1这两个列,则如果把其他的c2,c3,c4列也放在索引块里,会比较浪费空间。因为这三列并不经常被访问,没有必要把他们与id,c1放在一起。于是我么就可以通过设置pctthreshold和including这两个属性,从而只在索引块里存放id和c1,而且他的三列在放入overflow里,(overflow是一种segment).

pctthreshold说明留在索引块里的数据空间占总数据块大小的百分比,从0到50%。假设在IOT_TEST表中,id列和c1列总共大概需要400个字节,索引块大小为8kB,我们希望ID列和C1列留在索引块里。则留在索引块里的数据占整个索引块大小的5%(500/8192),于是可以将pctthreshold设置为5.我们还可以使用including,对于上面的例子来说,including c2表示从C2列开始,后面所有的列(也就是C2,C3,C4这三列)都放到overflow里。优先考虑pctthreshold,也就是说如果id列的值占数据块大小的百分比已经超过了指定的pctthreshold,则尽管指定的是从C2列开始后面的所有列都放入OVERFLOW,但是由于违反了pctthreshold,则C1以后的列也都全部放入overflow里(即c1,c2,c3,c4都放入overflow里)

IOT(Index Organized Table)的更多相关文章

  1. 简述Oracle IOT(Index Organized Table)

    转:http://blog.itpub.net/17203031/viewspace-744477 对关系型数据库产品(RDBMS)而言,一个重要特性就是:数据信息都被组织为二维数据表,信息的表达可以 ...

  2. [转]jQuery: get table column/row index remove table column (by column number)

    本文转自:http://www.xinotes.org/notes/note/1087/ <!DOCTYPE html><html><head> <title ...

  3. CHECK INDEX OF TABLE

    SELECT INDEX_NAME,COLUMN_NAME FROM ALL_IND_COLUMNS WHERE table_name = '';

  4. Oracle SQL优化器简介

    目录 一.Oracle的优化器 1.1 优化器简介 1.2 SQL执行过程 二.优化器优化方式 2.1 优化器的优化方式 2.2 基于规则的优化器 2.3 基于成本的优化器 三.优化器优化模式 3.1 ...

  5. Oracle composite index column ordering

    Question:  I have a SQL with multiple columns in my where clause.  I know that Oracle can only choos ...

  6. IOT和HEAP表区别

    Index Organized table by itself is a B-tree index. Index key is the primary key and the rest of colu ...

  7. Oracle的几种索引

    Oracle 提供了多种不同类型的索引以供使用.简单地说, Oracle 中包括如下索引: 1. B* 树索引 这些是我所说的 “ 传统 “ 索引.到目前为止,这是 Oracle 和大多数其他数据库中 ...

  8. Mysql相关知识点总结(一)

    information_schema库:information_schema库中的表大都是temporory表,都是只读的,不能进行更新.删除和插入等操作,也不能加触发器,因为它们实际只是一个视图,不 ...

  9. Mysql相关知识点梳理(一):优化查询

    EXPLAIN解析SELECT语句执行计划: EXPLAIN与DESC同义,通过它可解析MySQL如何处理SELECT,提供有关表如何联接和联接的次序,还可以知道什么时候必须为表加入索引以得到一个使用 ...

随机推荐

  1. Python之常用模块(待更新)

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  2. jquery 拓展方法

    摘抄自(http://hi.baidu.com/jjjvzugcpmcdmor/item/0e32a89c36a18544f04215d7) $.fn是指jquery的命名空间,加上fn上的方法及属性 ...

  3. Redis 学习笔记五 经常使用php函数

    PHPRedis的安装在这里: http://blog.csdn.net/xundh/article/details/46288277 键值操作 $redis = new Redis(); $redi ...

  4. Delphi中类的运行期TypeInfo信息结构说明

    Delphi中类的运行期TypeInfo信息结构说明 CnPack 开源软件项目 2007-09-19 21:55:58 Delphi中类的运行期TypeInfo信息结构说明作者:刘啸CnPack开发 ...

  5. Go的String转码包

    https://github.com/qiniu/iconv https://github.com/djimenez/iconv-go 这是与go不相干的转码包:https://github.com/ ...

  6. [Android阅读代码]圆形旋转菜单CircleMenu

    项目名称:圆形旋转菜单CircleMenu 原版项目代码下载 感谢原作者开源

  7. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 站点设置

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 站点设置         你应该熟悉(假设还咩有)的SharePo ...

  8. 超人学院Hadoop大数据技术资源分享

    超人学院Hadoop大数据技术资源分享 http://bbs.superwu.cn/forum.php?mod=viewthread&tid=807&fromuid=645 很多其它精 ...

  9. [linux]ubuntu apt-get安装软件失败

    1.首先查看 dns 配置 sudo vi /etc/resolv.conf nameserver 114.114.114.114 nameserver 8.8.8.8 2.修改 apt-get 源 ...

  10. hdu1695(莫比乌斯反演)

    传送门:GCD 题意:求[1,n],[1,m]gcd为k的对数. 分析:莫比乌斯入反演门题,gcd(x,y)==k等价于gcd(x/k,y/k)==1,求出[1,n][1,m]互质的对数,在减去[1, ...