`

oracle B*树的说明

阅读更多

oracle B*树的说明

 

转自:http://www.cnblogs.com/angzi/archive/2006/12/23/601398.html

 

Expert Oracle Database Architecture学习笔记

B*树索引(第十一章 索引)

Tom说,B*树索引是“传统索引”。到目前为止,这是Oracle和大多数其他数据库中最常用的索引。需要注意的是,这里的“B”不代表二叉(binary),而是代表平衡(balanced).B*树索引并不是一颗二叉树。

但是,其实现与二叉查找树很相似,其目标是尽可能减少Oracle查找数据所花费的时间。

Tom说话很严谨,他画出了一个示意图,并注明“不严格地说,如果在一个数字列上有一个索引,那么从概念上讲这个结构可能会如图11-1所示”,并进一步说,“也许会有一些块级优化和数据压缩,这些可能会使实际的块结构与图11-1所示并不相同。”

 



 

 

 

 

 

 

 

 

我真佩服Tom的严谨的态度。想想我们身边的许多人和事,要是出一个考试卷,就会有一个标准答案,可是这个答案真的标准吗?尤其是在计算机程序上,同样一个目的可以有许多途径来完成,可是如果你没有使用所谓的“标准答案”,就要被扣分,甚至不能得分。所以在大考试题时,不仅要考虑怎么解答问题,还要考虑出题的人想要哪个答案。呵呵,跑题了,接着做笔记。

这个树最底层的块称为叶子节点(leaf node)或叶子块(leaf block),其中分别包含各个索引建以及一个rowid(指向所索引的行)。叶子节点之上的内部块称为分支块(branch block)。这些节点用于在结构中实现导航。

有意思的是,索引的叶子节点实际上又构成了一个双向链表,执行索引区间扫描(值的有序扫描)也很容易,找到第一个值之后,我们不需要再在索引结构中导航,而只需根据需要,通过叶子节点向前或向后扫描就可以了。所以要满足诸如以下的谓词条件将相当简单:
  where x between 20 and 30
Oracle发现第一个最小值大于或等于20的索引叶子块,然后水平地遍历叶子节点链表,直到命中一个大于30的值。

B*树索引中不存在非唯一(nonunique)条目。在一个非唯一索引中,Oracle会把rowid作为一个额外的列追加到键上,使得键唯一。在一个唯一索引中,根据你定义的唯一性,Oracle不会再向索引建增加rowid。

B*树的特点之一是,所有叶子块都应该在书的同一层上。(这一段好像翻译的有些小问题,所以把Tom的原文抄写如下)

One of the properties of a B*Tree is that all leaf blocks should be at the same level in the tree. This level is also known as the height of the index, meaning that any traversal from the root block of the index to a leaf block will visit the same number of blocks. That is, to get to the leaf block to retrieve the first row for a query of the form "SELECT INDEXED_COL FROM T WHERE INDEXED_COL = :X" will take the same number of I/Os regardless of the value of :X that is used. In other words, the index is height balanced. Most B*Tree indexes will have a height of 2 or 3, even for millions of records. This means that it will take, in general, two or three I/Os to find your key in the index—which is not too bad.

B*树是一个绝佳的通用索引机制,无论是大表还是小表都很适用,随着底层表达小的增长,获取数据的性能只会稍有恶化(或者根本不会恶化)。

  • 大小: 10 KB
分享到:
评论

相关推荐

    oracle10g文档.pdf

    - **索引纵览**:详细介绍了各种类型的索引(B树索引、位图索引等),以及如何优化索引的使用。 - **索引组织表(IOT)纵览**:解释了IOT的概念及其优点。 - **应用域索引纵览**:介绍了应用域索引的特点及其应用场景...

    Oracle试题及答案

    - **标准索引**: 通常的B树索引,适用于大多数情况。 - **唯一索引**: 保证索引键值的唯一性。 - **分区索引**: 用于分区表的索引。 - **位图索引(Bitmap Index)**:特别适合于取值重复率较高的列,如性别、是否...

    oracle api 说明文档

    8. **索引**:提升查询速度的数据结构,包括B树索引、位图索引、函数索引等类型。 9. **触发器**:在特定数据库事件发生时自动执行的代码,常用于实现业务规则和数据完整性。 10. **视图**:虚拟表,基于一个或多...

    oracle的入门心得

    - **索引**:提高查询效率的结构,分为B树索引、位图索引等类型。 - **视图**:虚拟表,基于一个或多个表的查询结果,提供不同角度的数据访问。 - **存储过程和函数**:预编译的SQL和PL/SQL代码,用于执行复杂的...

    oracle学习手册 很详细的讲解 非扫描完整书签版1431页

    7. **索引与查询优化**:深入讨论不同类型的索引(如B树、位图、函数索引)以及如何利用索引来提升查询性能,讲解EXPLAIN PLAN和SQL Tuning Advisor等工具的使用。 8. **表分区**:介绍Oracle的表分区技术,如范围...

    oracle九阴真经

    6. **索引**:索引是提高查询效率的重要工具,包括B树索引、位图索引等类型,学习何时创建和使用索引以及如何优化索引。 7. **视图**:视图是虚拟表,基于一个或多个表的查询结果。学习创建和使用视图,可以简化...

    oracle从入门到精通.pdf

    - **不同类型的索引**:包括B树索引、位图索引等。 **2.8 控制用户的访问** 1. **数据库安全性**:确保只有授权用户才能访问数据。 2. **角色**:用于简化权限管理。 3. **集合操作**:使用UNION, INTERSECT, ...

    ORACLE进阶操作技巧

    - **注释说明**:为关键部分添加注释,便于他人理解代码逻辑。 - **安全性考量**:重视数据安全,采取必要的加密措施保护敏感信息。 #### 五、案例解析 - **硬件配置示例**:假设某银行使用的是POWER6架构P550...

    Oracle常用傻瓜问题1000问

    - **索引**:提高查询速度的数据结构,有B树索引、位图索引等类型。 - **触发器**:自动执行的PL/SQL代码,响应特定的DML事件(INSERT、UPDATE、DELETE)。 4. **NET 访问 Oracle 数据库相关**: Oracle提供了...

    oracle9i sql 说明文档

    5. **索引与性能**:Oracle 9i引入了各种类型的索引,如B树索引、位图索引、函数索引等,以提高查询性能。理解何时和如何创建索引是优化数据库性能的关键。 6. **视图**:视图是虚拟表,允许你根据需要组合多个表的...

    Oracle PPT 课件

    4. **索引**:索引是提高查询性能的关键,Oracle支持B树索引、位图索引、函数索引等多种类型的索引。 5. **事务处理**:Oracle保证了ACID(原子性、一致性、隔离性和持久性)特性,确保了事务的正确执行。 6. **...

    ORACLE数据库资料整理【经典】

    **索引的默认结构**通常基于B树,**对DML的影响**是指索引更新可能导致额外的开销。**索引状态**应定期检查,确保其有效性。 7. **Job设计**:Oracle的调度器(DBMS_SCHEDULER)允许创建定时任务,执行如备份、数据...

    Oracle Concepts Oracle概念(10g R2)(中英文对照文档)

    11. **存储索引**:涵盖了B树、位图和函数索引的使用,以及索引对查询性能的影响。 12. **集群数据库**:描述了Oracle Real Application Clusters (RAC)技术,如何实现多节点间的数据库共享。 13. **内存管理**:...

    超详细Oracle教程

    - **索引类型**:介绍B树索引、位图索引等不同类型的索引。 - **创建与维护索引**:讲解如何创建、重建、维护索引以优化查询性能。 #### 十八、序列、同义词 - **序列**:讲解SEQUENCE对象的用途及使用方法。 - **...

    ORACLE 合辑

    #### 树形数据处理 **查询基本语法:** - 使用`CONNECT BY`子句和`PRIOR`关键字来表达父子关系。 **关于PRIOR:** - PRIOR用于指定父节点的列名,例如:`CONNECT BY PRIOR id = parent_id`。 **节点和分支的裁剪...

    20天学习Oracle

    学习者需要理解不同类型的索引(如B树索引、位图索引)及其适用场景。 5. **安全性**:Oracle提供了用户管理和权限控制机制,包括用户、角色、权限和对象权限。学习者应掌握如何创建和管理用户,以及如何分配和撤销...

    oracle的索引初步学习.doc

    2. **常规B树索引**:最常见的索引类型,适用于大多数场景。 3. **位图(bitmap)索引**:用于处理大量重复数据的情况。 4. **翻转(reverse)索引**:一种特殊类型的索引,主要用于优化某些特定的查询操作。 #### ...

    oracle学生管理系统课程设计

    学习如何合理创建和使用索引,如B树索引、位图索引,以及何时使用唯一索引和非唯一索引。 9. **备份与恢复**:了解Oracle的备份策略,如完整备份、增量备份,以及如何使用RMAN(恢复管理器)进行数据恢复,以防止...

    oracle数据库参考手册

    索引类型包括B树索引、位图索引和函数索引等。 4. **存储过程和函数**:Oracle提供内置的存储过程和函数,如SYSDATE获取当前日期,USER获取当前用户等。用户也可以自定义存储过程和函数,增强数据库功能。 5. **...

Global site tag (gtag.js) - Google Analytics