Oracle 11g笔记——索引组织表

一、索引组织表(Index-Organized Table, IOT)

索引组织表是一类特殊的表,它将索引和表的数据存储在一起。普通表的数据以无序(Heap)的方式存放在数据库中。

而索引组织表按照主键进行排序,以二叉树的形式对表的数据进行存储。

索引组织表不存储ROWID,它通过主键来访问数据。

索引组织表适合通过主键对数据进行访问的应用。

1、优点

(1)快速的随机访问。索引和表的数据存储在一起,如果对表进行更新,Oracle只更新索引结构。

(2)快速的范围扫描。索引组织表已经按照主键对数据进行排序,因此,范围扫描的速度是很快的。

(3)更少的存储需求。索引数据和表的数据存储在一起,可以减少存储需求。普通的索引条目只包含索引值和指向数据行的ROWID

2、组成

(1)索引部分。存放主键值,频繁访问的部分非主键值,指向溢出区的ROWID

(2)溢出部分。用于存放非主键值。溢出区存放在一个溢出表空间中。用户可以指定溢出表空间。

3、示例

(1)创建索引组织表

SQL>crate table students(

name varchar(20) primary key,

id number,

location varchar2(200)

)

organization index

tablespace lmtbsb

pctthreshold 30

including location

overflow tablespace bigtbs_01;

注:索引组织表中一定要有主键,

pctthreshold:指定溢出比例,若超出限制,则溢出部分将被存储到溢出区中。

including:表示从这个列以后的所有列将存储在溢出区中。

overflow tablespace:指定溢出表空间

如果要想在索引组织表上创建位图索引,索引组织表必须带有映射(Mapping Table),如:在organization index下行加入:Mapping Table

若表已创建好,可以修改表

SQL>alter table students add mapping table;

(2)查看IOT

SQL>select owner,table_name,iot_name,iot_type

from dba_tables

where owner=‘test‘ and iot_type like ‘%IOT%‘;

时间: 2024-07-31 10:29:26

Oracle 11g笔记——索引组织表的相关文章

Oracle 11g笔记——索引

索引类型 二叉树索引.B树索引(B-tree Indexes) B树索引是使用最多的一种索引.默认情况下,创建的索引都是B树索引.使用B树结构来存放索引.B树底层是叶子节点,叶子节点存放索引值和行标识(ROWIND) 二叉树聚簇索引(B-tree Cluster Indexes) 哈希聚簇索引(Hash Cluster Indexes) 反向索引(Reverse Key Indexes) 反向索引也属于B树索引,它把索引值按字节反转过来.反向索引适合集群 位图索引(Bitmap Indexes)

索引组织表和普通表

官方文档 http://docs.oracle.com/cd/B19306_01/server.102/b14220/schema.htm#CNCPT911 堆表(heap table)数据插入时时存储位置是随机的,主要是数据库内部块的空闲情况决定,获取数据是按照命中率计算,全表扫表时不见得先插入的数据先查到. 索引表(iot)数据存储是把表按照索引的方式存储的,数据是有序的,数据的位置是预先定好的,与插入的顺序没有关系. 索引表的查询效率比堆表高(相当于查询索引的效率),插入数据的速度比堆表慢

堆组织表,索引组织表和索引聚簇表

--- 堆组织表就不说了,其索引中记录了记录所在位置的rowid,查找的时候先找索引,然后再根据索引rowid找到块中的行数据 索引组织表,其行数据以索引形式存放,因此找到索引,就等于找到了行数据. -- 堆组织表的数据是散放的,索引和表的数据是分离的 索引组织表的索引和数据是在一起的 -- 堆组织表的存储速度因为不用考虑排序, 所以存储速度会比较快. 但是要查找符合某个条件的记录, 就必须得读取全部的记录以便筛选.而这个时候为了加快查询速度, 索引就出现了, 索引是针对少量特定字段的值拿出来进

堆表 索引组织表

堆表 : 堆就是无序数据的集合,索引就是将数据变得有序,在索引中键值有序,数据还是无序的 数据存放在数据里面,索引存放在索引里 堆表中,主键索引和普通索引一样的,叶子节点存放的是指向堆表中数据的指针(可以是一个页编号加偏移量),指向物理地址,没有回表的说法 堆表中,主键和普通索引基本上没区别,和非空的唯一索引没区别 mysql 的 myisam 引擎,oracle pg 都支持的是堆表 索引组织表: innodb 引擎支持的就是索引组织表 对于主键的索引,页子节点存放了一整行所有数据,其他索引称

[转帖]堆组织表,索引组织表和索引聚簇表

https://www.cnblogs.com/youngerger/p/8446399.html --- 堆组织表就不说了,其索引中记录了记录所在位置的rowid,查找的时候先找索引,然后再根据索引rowid找到块中的行数据 索引组织表,其行数据以索引形式存放,因此找到索引,就等于找到了行数据. -- 堆组织表的数据是散放的,索引和表的数据是分离的 索引组织表的索引和数据是在一起的 -- 堆组织表的存储速度因为不用考虑排序, 所以存储速度会比较快. 但是要查找符合某个条件的记录, 就必须得读取

解决 Oracle 11g 不能导出空表的问题

--解决 Oracle 11g 不能导出空表的问题 --执行下面语句,查询数据库中的空表,同时产生分配空间.把生成的结果复制出来并执行. select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 --如果以上方法不行,可改用下面方法 select 'alter table '||table_name||' allocate extent(size 64k);' from tab

索引组织表

select * from aa where id=1; 如果在id列建立索引,那么他会首先在索引块中找到该记录的rowid,然后再进行回表读, 如果要查询索引以外的列,那么回表读是不可避免的. 但是建立索引组织表就可以避免回表读 试验 索引组织表的最大特点就是表就是索引,索引就是表,这个一种特别的设计,所以不用访问表 不过这种表的开销要比普通表的开销大. 因为表要和索引一样要有序的排列,更新负担会很严重,因此这种设计一般使用在更新很少,频繁读的的应用场合 比如地区配置表,这种表数据一般很少变动

【Todo】聚集索引、非聚集索引、聚集索引组织表、堆组织表、InnoDB、MyISAM等的学习

参考: http://www.jb51.net/article/76007.htm http://blog.csdn.net/xqy1522/article/details/6750252 下面是第一篇的总结: 在MySQL中,InnoDB引擎表是(聚集)索引组织表(clustered index organize table),而MyISAM引擎表则是堆组织表(heap organize table). 聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序: 而非聚集索引

MySQL InnoDB 索引组织表 & 主键作用

InnoDB 索引组织表 一.索引组织表定义 在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table IOT). 在InnoDB存储引擎中,每张表都有个主键(Primary key),如果在创建表时没有地定义主键,则InnoDB存储引擎会选择表中符合条件的列去创建主键. 条件: 1.  首先判断表中是否有非空的唯一索引(Unique NOT NULL),如果有,则该列即为主键. 2. 如果不符合上述条件,InnoDB存储