Oracle的索引组织表,逻辑RowID和物理RowID的关系

如题所述

堆组织表(heap-organized table)默认创建时无特定排序,插入数据迅速,但查找效率低,可通过索引提升查找速度。插入快、查找慢是其主要特点。堆表的每一行具有唯一ROWID,当行位置变动时ROWID也改变。

索引组织表(Index Organized Tables, IOT)则以类似于B树索引的结构存储数据,行数据与主键索引存储在一起,适用于经常检索主键的情况。IOT中数据按主键存储排序,操作时需定位到指定叶块,插入速度相较于堆表较慢,但适合用于不常更新的表。

IOT表适用于文献检索、空间数据以及OLAP应用。IOT表中数据和索引合二为一,减少了存储空间占用和I/O操作。然而,数据量大时,查询性能会降低,因此需设置溢出段以提高效率。同时,IOT支持键压缩,减少重复值占用空间。

插入、更新、删除和选择操作均可在IOT表上执行。可通过ALTER TABLE语句调整溢出段属性。IOT表与普通堆表相比,查询时效率更高,但由于插入速度慢,不适用于经常更新的表。

IOT表适用于代码查找表、经常通过主键访问的表、构建自定义索引结构以及加强数据物理存储的场合。经常使用between查询于主键或唯一键的IOT表也具有优势。

在IOT表上建立二次索引(secondary index)能优化访问非主键列或非主键前缀列的性能。二次索引建立在逻辑ROWID上,通过物理推测找到数据在索引块的实际位置,减少I/O操作。当数据行移动时,二次索引不会失效,但使用映射表中逻辑ROWID进行物理推测可能不准确。

Oracle还支持在IOT表上创建位图索引,与堆表上的位图索引类似,但需要使用映射表存储逻辑ROWID。位图索引通过搜索键检索,并将位图索引项转换为物理ROWID。堆表直接通过物理ROWID访问数据,而IOT表需通过逻辑ROWID和映射表访问。

数据行移动后,IOT表上的位图索引仍可使用主键访问,但映射表中某些逻辑ROWID进行物理推测可能不准确。位图索引的维护与更新依赖于IOT表的主键。
温馨提示:内容为网友见解,仅供参考
无其他回答

Oracle的索引组织表,逻辑RowID和物理RowID的关系
Oracle还支持在IOT表上创建位图索引,与堆表上的位图索引类似,但需要使用映射表存储逻辑ROWID。位图索引通过搜索键检索,并将位图索引项转换为物理ROWID。堆表直接通过物理ROWID访问数据,而IOT表需通过逻辑ROWID和映射表访问。数据行移动后,IOT表上的位图索引仍可使用主键访问,但映射表中某些逻辑ROWID进行...

Oracle数据库中rowid什么作用?
普通的堆表中的rowid是物理rowid,索引组织表(IOT)的rowid是逻辑rowid。oracle提供了一种urowid的数据类型,同时支持物理和逻辑rowid。\\x0d\\x0a物理rowid又分为扩展rowid(extendedrowid)和限制rowid(restrictedrowid)两种格式。限制rowid主要是oracle7以前的rowid格式,现在已经不再使用,保留该类型只是为了兼...

什么是Rowid?
Rowid分为物理rowid和逻辑rowid两种类型。对于普通堆表,rowid是物理rowid,而在索引组织表(IOT)中,rowid则表现为逻辑rowid。为了兼容性,Oracle还支持urowid数据类型,它能够处理物理和逻辑rowid的混合情况。物理rowid进一步细分为扩展rowid和限制rowid,但限制rowid主要存在于Oracle 7之前的版本,如今已被较少...

在oracle数据库表中没有添加rowid字段为什么会出现
rowid 是 oracle 数据库表中的伪列, rowid 首先是一种数据类型,它唯一标识一条记录物理位置, 基于64位编码的18个字符显示。因为 rowid 是伪列, 所以并未真的存储在表中,但可以从表中查询,但不支持插入,更新,删除它们的值。其他的伪列还有 rownum (行号)...

oracle索引的分类
其中包含了一个范围的ROWID.因此Oracle必须对一个给定值锁定所有范围内的ROWID.这种锁定可能在某些DML语句中造成死锁.1.3 HASH索引 1.4 索引编排表 1.5 反转键索引 1.6 基于函数的索引 1.7 分区索引 分区索引(partitional index)就是简单地把一个索引分成多个片段.通过把一个索引分成多个片段,您...

求助各位大虾,本科毕业设计做Oracle数据库
1、管理组织索引 索引可以大大加快数据库的查询速度,索引把表中的逻辑值映射到安全的RowID,因此索引能进行快速定位数据的物理地址。六、多CPU和并行查询PQO(Parallel Query Option)方式的利用 七、实施系统资源管理分配计划 ORACLE 提供了Database Resource Manager(DRM,数据库资源管理器)来控制用户的资源...

Oracle查询当前某条数据的前一行数据与后一行数据!...解决问题悬赏20分...
给你一个提示,Oracle每行数据都会有一个ROWID,解析出行号。你可以找到上一行的ROWID和下一行的ROWID,而且用ROWID查询,效率非常高!!!如果你是要排序过的数据,只能用索引组织表。或者先排序,用分析函数得到一个编号伪劣,然后根据这个编号再找前一条,或者后一条。另外,Oracle SQL中还有一个函数...

堆组织表和索引组织表的区别
其索引中记录了记录所在位置的rowid,查找的时候先找索引,然后再根据索引rowid找到块中的行数据。索引和表数据是分离的② 索引组织表,其行数据以索引形式存放,因此找到索引,就等于找到了行数据。索引和数据是在一起的 三 查找过程① 堆组织表一般索引大概3-5层,比如rowid为007,那么要找到007可...

Oracle数据库中如何选择合适的索引类型
这主要是因为标准索引是通过在索引中保存排序过的索引列以及对应的ROWID来实现的。若我们在基数小的列上建立标准索引的话,则其会返回大量的记录。 而当我们在创建位图索引的时候,在Oracle会对整个表进行扫描,并且会为索引列的每个取值建立一个位图。若内容相同,则在位图上会以一个相同的数字表示。此时,若这个字段的...

数据库索引有哪几种,怎样建立索引
所以当字段的基数很低时,需要使用位图索引。(“低”的标准是取值数量 < 行数*1%)位图索引的逻辑结构如上图所示:索引中不再记录rowid和键值,而是将每个值作为一列,用0和1表示该行是否等于该键值(0表示否;1表示是)。其中位图索引的行顺序与原表的行顺序一致,可以在查询数据的过程中对应计算出行...

相似回答
大家正在搜