欢迎来到天天文库
浏览记录
ID:6321974
大小:71.89 KB
页数:47页
时间:2018-01-10
《简述oracle iot(index organized table)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、对关系型数据库产品(RDBMS)而言,一个重要特性就是:数据信息都被组织为二维数据表,信息的表达可以通过一系列的关联(Join)来完成。具体数据库产品在实现这个标准的时候,又有千差万别的特点。就是一个特定的数据库RDBMS产品,往往也提供不同的实现方法。 1、从堆表(HeapTable)到索引组织表(IndexOrganizationTable) Oracle作为一款成熟的数据库软件产品,就提供了多种数据表存储结构。我们最常见的就是三种,分别为堆表(HeapTable)、索引组织表(IndexOrganizationTable,简称为IOT)
2、和聚簇表(ClusterTable)。 HeapTable是我们在Oracle中最常使用的数据表,也是Oracle的默认数据表存储结构。在HeapTable中,数据行是按照“随机存取”的方式进行管理。从段头块之后,一直到高水位线一下的空间,Oracle都是按照随机的方式进行“粗放式”管理。当一条数据需要插入到数据表中时,默认情况下,Oracle会在高水位线以下寻找有没有空闲的地方,能够容纳这个新数据行。如果可以找到这样的地方,Oracle就将这行数据放在空位上。注意,这个空位选择完全依“能放下”的原则,这个空位可能是被删除数据行的覆盖位。 如
3、果HeapTable段的HWM下没有找到合适的位置,Oracle堆表才去向上推高水位线。在数据行存储上,HeapTable的数据行是完全没有次序之分的。我们称之为“随机存取”特征。 对HeapTable,索引独立段的添加一般可以有效的缓解由于随机存取带来的检索压力。Index叶子节点上记录的数据行键值和Rowid取值,可以让ServerProcess直接定位到数据行的块位置。 聚簇(ClusterTable)是一种合并段存储的情况。Oracle认为,如果一些数据表更新频率不高,但是经常和另外一个数据表进行连接查询(Join)显示,就可以将其组
4、织在一个存储结构中,这样可以最大限度的提升性能效率。对聚簇表而言,多个数据表按照连接键的顺序保存在一起。 通常系统环境下,我们使用ClusterTable的情况不太多。Oracle中的数据字典大量的使用聚簇。相比是各种关联的基表之间固定连接检索的场景较多,从而确定的方案。 最后就是本系列的IOT(IndexOrganizationTable)。同ClusterTable一样,IOT是在Oracle数据表策略的一种“非主流”,应用的场景比较窄。但是一些情况下使用它,往往可以起到非常好的效果。 简单的说,IOT区别于堆表的最大特点,就在于数据行的
5、组织并不是随机的,而是依据数据表主键,按照索引树进行保存。从段segment结构上看,IOT索引段就包括了所有数据行列,不存在单独的数据表段。 IOT在保存结构上有一些特殊之处,应用在一些特殊的场景之下。本系列将逐个分析IOT的一些特征,最后讨论我们究竟在什么样的场景下,可以选择IOT作为数据表方案。 2、IOT基础 在创建使用IOT上,我们要强调PrimaryKey的作用。对一般的堆表而言,PrimaryKey是可有可无的。一种说法是:当一个堆表没有设置主键的时候,rowid伪列就是对应的主键值。而且,PrimaryKey可以在数据表创建之
6、后进行追加设置。 但是,IOT对于主键的设置格外严格,要求创建表的时候就必须指定明确的主键列。下面我们通过一系列的实验来证明,实验环境为Oracle11g。 SQL>select*fromv$version;BANNER------------------------------------OracleDatabase11gEnterpriseEditionRelease11.2.0.1.0-ProductionPL/SQLRelease11.2.0.1.0-ProductionCORE11.2.0.1.0Production 我们使用相
7、同的结构,来创建出IOT和HeapTable对照。 --不指定主键,是无法创建IOT;SQL>createtablem(idnumber)organizationindex; createtablem(idnumber)organizationindexORA-25175:未找到任何PRIMARYKEY约束条件 在createtable语句后面使用organizationindex,就指定数据表创建结构是IOT。但是在不指定主键PrimaryKey的情况下,是不允许建表的。 SQL>createtablet_iot(object_idnu
8、mber(10)primarykey,object_namevarchar2(100))organizationindex;Tablecreated SQL>cre
此文档下载收益归作者所有