`

Oracle索引——索引类型

阅读更多
Oracle 提供了多种不同类型的索引以供使用。简单地说, Oracle 中包括如下索引:

B* 树索引
这些是我所说的 “ 传统 “ 索引。到目前为止,这是 Oracle 和大多数其他数据库中最常用的索引。 B* 树的构造类似于二叉树,能根据键提供一行或一个行集的快速访问,通常只需很少的读操作就能找到正确的行。不过,需要注意重要的一点, ” B* 树 “ 中的 ” B “ 不代表二叉( binary ),而代表平衡( b alanced )。B* 树索引并不是一颗二叉树,这一点在介绍如何在磁盘上物理地存储 B* 树时就会了解到。 B* 树索引有以下子类型:
索引组织表( index organized table ):索引组织表以 B* 树结构存储。堆表的数据行是以一种无组织的方式存储的(只要有可用的空间,就可以放数据),而 IOT 与之不同, IOT 中的数据要按主键的顺序存储和排序。对应用来说, IOT 表现得与 “ 常规 “ 表并无二致;需要使用 SQL 来正确地访问 IOT 。 IOT 对信息获取、空间系统和 OLAP 应用最为有用。 IOT 在上一章已经详细地讨论过。
B*树聚簇索引( B*tree cluster index )这些是传统 B* 树索引的一个变体(只是稍有变化)。 B* 树聚簇索引用于对聚簇键建立索引(见第 11. 章中 “ 索引聚簇表 “ 一节),所以这一章不再讨论。在传统 B* 树中 ,键都指向一行;而 B* 树聚簇不同,一个聚簇键会指向一个块,其中包含与这个聚簇键相关的多行。
降序索引( descending index ):降序索引允许数据在索引结构中按 “ 从大到小 “ 的顺序(降序)排序,而不是按 ” 从小到大 “ 的顺序(升序)排序。我们会解释为什么降序索引很重要,并说明降序索引如何工作。
反向键索引( reverse key index ):这也是 B* 树索引,只不过键中的字节会 “ 反转 “ 。利用反向键索引,如果索引中填充的是递增的值,索引条目在索引中可以得到更均匀的分布。例如,如果使用一个序列来生成主键,这个序列将生成诸如 987500 、 987501 、 987502 等值。这些值是顺序的,所以倘若使用一 个传统的 B* 树索引,这些值就可能放在同一个右侧块上,这就加剧了对这一块的竞争。利用反向键, Oracl e则会逻辑地对 205789 、 105789 、 005789 等建立索引。 Oracle 将数据放在索引中之前,将先 把所存储数据的字节反转,这样原来可能在索引中相邻放置的值在字节反转之后就会相距很远。通过反转字节,对索引的插入就会分布到多个块上。

位图索引( bitmap index )
在一颗 B* 树中,通常索引条目和行之间存在一种一对一的关系:一个 索引条目就指向一行。而对于位图索引,一个索引条目则使用一个位图同时指向多行。位图索引适用于高度重复而且通常只读的数据(高度重复是指相对于表中的总行数,数据只有很少的几个不同值)。考虑在一 个有 100 万行的表中,每个列只有 3 个可取值: Y 、 N 和 NULL 。举例来说,如果你需要频繁地统计多少行有值Y ,这就很适合建立位图索引。不过并不是说如果这个表中某一列有 11.000 个不同的值就不能建立位图索引,这一列当然也可以建立 位图索引。在一个 OLTP 数据库中,由于存在并发性相关的问题,所以不能考虑使用位图索引(后面我们就会讨论这一点)。注意,位图索引要求使用 Oracle 企业版或个人版。
位图联结索引( bitmap join index ):这为索引结构(而不是表)中的数据提供了一种逆规范化的 方法。例如,请考虑简单的 EMP 和 DEPT 表。有人可能会问这样一个问题: “ 多少人在位于波士顿的部门工作 ?“ EMP 有一个指向 DEPT 的外键,要想统计 LOC 值为 Boston 的部门中的员工人数,通常必须完成表联结,将 LOC 列联结至 EMP 记录来回答这个问题。通过使用位图联结索引,则可以在 EMP 表上对 LOC 列建立索引 。

基于函数的索引( function-based index )
这些就是 B* 树索引或位图索引,它将一个函数计算得到的结果存储在行的列中,而不是存储列数据本身。可以把基于函数的索引看作一个虚拟列(或派生列)上的索引,换句话说,这个列并不物理存储在表中。基于函数的索引可以用于加快形如 SELECT * FROM T W HERE FUNCTION(DATABASE_COLUMN) = SAME_VALUE 这样的查询,因为值 FUNCTION(DATABASE_COLUMN) 已经提前计算并存储在索引中。

应用域索引( application domain index )
应用域索引是你自己构建和存储的索引,可能存储在Oracle 中,也可能在 Oracle 之外。你要告诉优化器索引的选择性如何,以及执行的开销有多大,优化器则会根据你提供的信息来决定是否使用你的索引。 Oracle 文本索引就是应用域索引的一个例子;你也可 以使用构建 Oracle 文本索引所用的工具来建立自己的索引。需要指出,这里创建的 “ 索引 “ 不需要使用传统的索引结构。例如, Oracle 文本索引就使用了一组表来实现其索引概念。
分享到:
评论

相关推荐

    Oracle专题——外连接过滤.pdf

    在外连接中,不同类型的连接允许我们获取所有相关记录,即使在另一张表中没有匹配的记录。 在ANSI SQL-92标准中,外连接被引入以增强SQL的表达能力。在Oracle 9i之前,外连接主要通过使用"(+)"操作符来实现。自...

    性能调优——Oracle索引技术的应用与剖析

    Oracle索引技术在性能调优中的应用与剖析 在数据库管理中,性能调优是一项至关重要的任务,尤其对于处理大量数据的系统来说更是如此。Oracle数据库作为业界广泛使用的数据库管理系统,其索引技术是优化查询性能的...

    Oracle索引技术 ((美)Darl Kuhn) 中文.pdf

    1. 索引类型:在Oracle数据库中,主要分为两大类索引——B-tree索引和位图索引。B-tree索引是最常见的索引类型,适用于大多数情况,尤其是在数据值不重复或重复不多时。位图索引则更适合于数据值有大量重复值的情况...

    深入解析Oracle——DBA入门、进阶与诊断案例

    3. **数据库安装与升级**:详述Oracle数据库的安装过程,包括选择适当的安装类型、配置网络服务和初始化参数。同时,讨论数据库的升级和迁移策略。 4. **性能优化**:介绍Oracle的性能分析工具,如SQL*Plus、 ...

    Oracle经典教程1——走进Oracle

    ### Oracle经典教程1——走进Oracle #### Oracle简介 Oracle是一种基于对象的关系型数据库管理系统,它由美国甲骨文公司开发并维护。Oracle数据库系统因其高度可靠性和强大的数据处理能力而闻名,广泛应用于各种...

    Oracle学习笔记——day01

    在深入学习Oracle数据库时,还会接触到更多高级概念,如索引、视图、存储过程、触发器、游标等,这些都是提升数据库性能和管理效率的关键。随着学习的深入,你将更熟练地运用这些工具和技巧来管理和操作数据库,为...

    Oracle应用项目——使用OracleEM创建表空间.pdf

    在Oracle数据库中,表空间(Tablespace)是存储数据的主要单位,它由一个或多个数据文件组成,用于容纳数据库对象如表、索引等。在Oracle企业管理器(Oracle Enterprise Manager,简称Oracle EM)中创建表空间是...

    存储基础知识——索引的本质

    结合提供的"存储基础知识——索引实现.ppt"文件,你可能能更直观地了解到索引的具体实现方式和案例分析,包括如何创建、使用和优化索引,以及在不同场景下如何选择合适的索引类型。这份资料将有助于深化你对索引本质...

    oracle索引介绍

    - 自Oracle 9i起,引入了一种新的索引扫描模式——索引跳跃扫描(Index Skip Scan),即使在WHERE子句中不包含前导列的情况下也能利用索引。 - Oracle会根据统计信息自动选择最合适的访问路径。通过提示(Hint)...

    oracle教程--深入浅出oracle学习资料

    首先,Oracle数据库的核心概念包括:关系数据库模型、SQL语言、数据类型、表、索引、视图和存储过程。关系数据库模型是Oracle的基础,它基于E-R模型,通过表格形式来组织和管理数据。SQL(Structured Query Language...

    Oracle性能分析——使用set_autotrace_on和set_timing_on来分析select语句的性能.doc

    Oracle 性能分析——使用 set_autotrace_on 和 set_timing_on 来分析 select 语句的性能 Oracle 数据库性能分析是数据库优化的重要步骤之一,通过对 SQL 语句的执行计划和运行时间的分析,可以了解数据库的性能瓶颈...

    书籍:Oracle与MySQL数据库索引设计与优化

    《Oracle与MySQL数据库索引设计与优化》这本书深入探讨了两个主流关系型数据库管理系统——Oracle和MySQL中的索引设计和优化策略。索引是数据库性能的关键因素,它们能够加速数据检索,提高系统效率,尤其在大数据量...

    oracle系统培训课件——资料包(7个ppt).rar

    这个“Oracle系统培训课件——资料包(7个ppt)”压缩文件包含了一系列PPT教程,旨在帮助学习者深入理解Oracle系统的各个方面。下面我们将详细探讨这些课件可能涵盖的关键知识点。 1. **Oracle概述**: - Oracle...

    Mysql库转换Oracle库工具——数据库转义工具

    2. **数据映射**:由于MySQL和Oracle在数据类型上有差异,工具会自动处理这些差异,如将MySQL的VARCHAR2转换为Oracle的VARCHAR2,或将TINYINT转换为NUMBER。 3. **脚本转换**:MySQL的SQL语句可能不适用于Oracle,...

    Oracle数据库设计文档——帮助数据库初学者了解数据库设计

    逻辑设计阶段,我们把ER模型转换为特定数据库系统的数据模式,如Oracle的表、视图、索引等。在这个过程中,需要考虑数据类型的选择、主键和外键的定义、以及存储过程和函数的设计,以确保数据的一致性和完整性。 ...

    oracle系统培训课件——资料包(7个ppt)

    这个“Oracle系统培训课件——资料包(7个ppt)”提供了全面了解Oracle系统的宝贵资源,旨在帮助学习者掌握Oracle的基础知识、进阶技能以及实际操作经验。以下是对每个PPT可能涵盖的关键知识点的详细解读: 1. **...

    Oracle经典教程4——表空间和数据库对象

    ### Oracle经典教程4——表空间和数据库对象 #### 一、概述 本章节主要介绍了Oracle数据库中的几个核心概念,包括表空间以及多种数据库对象,如同义词、序列、视图和索引等。这些概念对于理解Oracle数据库的架构与...

    Oracle Index Internals.pdf

    - **反转键索引**:介绍了一种特殊类型的索引——反转键索引。 - **索引统计信息**:阐述了索引统计信息的真实含义。 - **高聚簇因子误区**:澄清了高聚簇因子并不总是意味着需要重建索引。 - **包含NULL值的列是否...

Global site tag (gtag.js) - Google Analytics