`
my_ora
  • 浏览: 28404 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle 索引介绍

阅读更多
群:127881306
索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据(加快查询);
索引由根节点、分支节点和叶子节点组成,上级索引块包含下级索引块的索引数据,叶节点包含索引数据和确定行实际位置的rowid。
查询DBA_INDEXES视图可得到表中所有索引的列表,注意只能通过USER_INDEXES的方法来检索模式(schema)的索引。访问USER_IND_COLUMNS视图可得到一个给定表中被索引的特定列。
通过每个行的ROWID,索引Oracle提供了访问单行数据的能力。ROWID其实就是直接指向单独行的线路图.
索引分类:
• 逻辑上:
单列索引, 多列索引, 唯一索引,非惟一索引。
• 物理上:
B*-Tree索引,反向索引,位图索引。
单列索引和复合索引
• 单列索引是基于单个列所建立的索引。多列索引是基于两列或多列所建立的索引。
• 单列索引
Create index emp_ind1 on emp(ename);
• 复合索引
Create index emp_ind2 on emp(ename,job);
惟一索引和非惟一索引
• 惟一索引是索引列值不能重复的索引。
• 非惟一索引是索引列值可以重复的索引。无论是惟一索引还是非惟一索引,索引列都允许NULL。
• B*-tree索引
• B*Tree索引是最常见的索引结构,默认建立的索引就是这种类型的索引。B*Tree索引在检索高基数数据列(高基数数据列是指该列有很多不同的值)时提供了最好的性能。当取出的行数占总行数比例较小时B-Tree索引比全表检索提供了更有效的方法。但当检查的范围超过表的10%时就不能提高取回数据的性能。B-Tree索引是基于二叉树的,由分支块(branch block)和叶块(leaf block)组成。在树结构中,位于最底层底块被称为叶块,包含每个被索引列的值和行所对应的rowid。在叶节点的上面是分支块,用来导航结构,包含了索引列(关键字)范围和另一索引块的地址 .
• 创建索引:
1: create index STUDENT_IND_name on STUDENT(NAME) tablespace USERS ;
2:create index STUDENT_IND_name on STUDENT(NAME,AGE) tablespace USERS ;

• 假设我们要找索引中值为80的行,从索引树的最上层入口开始,定位到大于等于50,然后往左找,找到第2个分支块,定位为75-100,最后再定位到叶块上,找到80所对应的rowid,然后根据rowid去读取数据块获取数据。如果查询条件是范围选择的,比如where column >20 and column <80,那么会先定位到第一个包含20的叶块,然后横向查找其他的叶块,直到找到包含80的块为止,不用每次都从入口进去再重新定位。
• 反向索引
• 反向索引是B*Tree索引的一个分支,它的设计是为了运用在某些特定的环境下的。Oracle推出它的主要目的就是为了降低在并行服务器(Oracle Parallel Server)环境下索引叶块的争用。当B*Tree索引中有一列是由递增的序列号产生的话,那么这些索引信息基本上分布在同一个叶块,当用户修改或访问相似的列时,索引块很容易产生争用。反向索引中的索引码将会被分布到各个索引块中,减少了争用。反向索引反转了索引码中每列的字节。
• 建立反向索引:
create index reversed_ind_emp on emp(Order_ID) reverse;
如果有一个名称为order_id的列值在某行上是12345,oracle就将它颠倒为54321。这样连续的几个数不会在同一个页块里。不过反向索引又一个缺点就是不能在所有使用常规索引的地方使用。在范围搜索中其不能被使用,例如,where column>value,因为在索引的叶块中索引码没有分类,所以不能通过搜索相邻叶块完成区域扫描。
注意:只有索引中的值是逆向的,表中的值保持不变
位图索引
• 位图索引主要用于决策支持系统或静态数据,不支持行级锁定。位图索引最好用于低cardinality列(即列的唯一值除以行数为一个很小的值,接近零),例如又一个“性别”列,列值有“Male”,“Female”,“Null”等3种,但一共有300万条记录,那么3/3000000约等于0,这种情况下最适合用位图索引。
• 创建位图索引:
create bitmap index inx_bitmap_emp on emp(sex);
位图索引的格式
行值  1 2 3 4 5 6 7 8 9 10
Male  1 0 0 0 0 0 0 0 1 1
Female 0 1 1 1 0 0 1 1 0 0
Null  0 0 0 0 1 1 0 0 0 0

如果搜索where gender=’Male’,要统计性别是”Male”的列行数的话,Oracle很快就能从位图中找到共3行即第1,9,10行是符合条件的;如果要搜索where gender=’Male’ or gender=’Female’的列的行数的话,也很容易从位图中找到共8行即1,2,3,4,7,8,9,10行是符合条件的。如果要搜索表的值的话,那么Oracle会用内部的转换函数将位图中的相关信息转换成rowid来访问数据块。
分享到:
评论

相关推荐

    Oracle索引介绍.pdf

    【Oracle索引介绍】 在数据库管理系统中,索引是一种至关重要的数据结构,它极大地提高了数据检索的速度。Oracle数据库,作为一款广泛使用的RDBMS(关系型数据库管理系统),同样利用索引来优化查询性能。本篇文章...

    oracle索引介绍

    ### Oracle索引介绍 在数据库管理系统(DBMS)中,索引是提高数据检索速度的重要工具之一。Oracle作为一款广泛使用的数据库系统,在索引管理方面提供了丰富的功能和灵活性。本文将详细介绍Oracle中的普通索引与组合...

    ORACLE索引介绍与高性能SQL优化

    Oracle数据库是目前最流行的企业级数据库之一,它提供了丰富的数据管理功能,其中包括索引技术。索引是数据库中一种重要的辅助结构,它可以帮助加快数据检索速度,优化SQL性能。在处理大量的数据时,索引的作用尤其...

    ORACLE索引介绍与高性能SQL优化.pdf

    Oracle索引是数据库管理系统Oracle中的一种重要数据结构,它的主要作用是提高数据查询的效率,减少I/O操作,以及在某些情况下消除磁盘排序。Oracle使用B*树(B星树)作为其主要的索引数据结构,无论是非唯一索引还是...

    oracle索引与分区索引介绍

    Oracle 索引与分区索引介绍 Oracle 索引与分区索引是 Oracle 数据库中两个重要的概念,它们都是为了提高查询性能和数据存储效率而设计的。在本文中,我们将详细介绍 Oracle 索引与分区索引的概念、特点、分类、创建...

    《Oracle_全文索引_详细介绍》_40页.pdf

    ### Oracle全文索引详解 #### 一、Oracle全文索引概述 Oracle全文索引是一种特殊类型的索引,它主要用于提高基于文本的查询性能。自从Oracle 7.3版本开始引入了这一特性,允许用户通过Oracle服务器提供的上下文...

    oracle分区与索引

    #### 二、Oracle 索引介绍 索引是用于快速查找表中数据的一种数据结构。Oracle提供了多种类型的索引,每种类型都有其适用场景。 ##### 1. 常见索引类型 - **B树索引**:最常见的索引类型,适用于各种查询场景。 -...

    Oracle 索引 使用方法

    Oracle 索引 使用方法,索引 使用原理, 索引 使用顺序过程

    oracle索引,常见索引问题

    Oracle数据库中的索引是优化查询性能的关键工具,它允许快速定位和访问数据。常见的索引类型包括B*树索引和位图索引,每种都有其特定的应用场景和优势。 1. **B*树索引**:这是最常见的索引类型,类似于二叉树结构...

    ORACLE索引详解及SQL优化

    本文将深入探讨Oracle索引的原理、创建方法,并结合SQL优化策略,帮助你提升数据库查询速度,降低资源消耗。 首先,我们要理解索引的基本概念。在数据库中,索引类似于书籍的目录,它为数据提供快速访问的途径。...

    Oracle索引优化相关

    ### Oracle索引优化相关知识点详解 #### 一、基本索引概念 在Oracle数据库中,索引是提高数据检索速度的重要工具。通过查询`DBA_INDEXES`视图,可以获取到当前数据库中所有表的所有索引信息。需要注意的是,如果...

    Oracle索引分析与比较

    Oracle 索引是数据库管理系统中提升数据查询速度的关键组件,尤其在大型企业级应用中,选择合适的索引类型对于数据库性能至关重要。本篇文章将深入探讨Oracle中的B*Tree索引、反向索引、降序索引、位图索引和函数...

    oracle索引

    oracle的索引,非常适合初学者,介绍索引的分类,如何创建,修改等

    oracle 索引的原理

    oracle 索引的原理原理深入理解!

    oracle索引被限制的一些情况

    Oracle索引被限制的一些情况 Oracle索引是关系数据库管理系统中用于提高查询效率的一种机制,但是索引的使用也存在一些限制。本文将详细介绍一些常见的限制情况,帮助开发人员更好地使用索引,提高查询效率。 限制...

    oracle约束和索引笔记

    本笔记主要探讨了两个关键概念:约束和索引,这些都是Oracle数据库中的基础但至关重要的元素。 **1. 约束(Constraints)** 约束是Oracle数据库中用于确保数据完整性的规则。它们分为以下几种类型: - **非空约束...

    数据库 创建索引 sql oracle

    "数据库创建索引SQL Oracle" 数据库索引是数据库性能优化的重要手段之一。创建索引可以提高查询速度,降低数据库的负载,提高数据的安全性。本文将详细介绍数据库创建索引的原则、分类、创建方法、管理和优化等方面...

    oracle索引类型及扫描方式大整理new

    ### Oracle索引类型详解 #### 一、B\*Tree索引:数据检索的基石 在Oracle数据库中,B\*Tree索引是最常见的索引结构,也是默认创建的索引类型。它基于二叉树原理,由分支块(branch block)和叶块(leaf block)构成,...

    Oracle索引优化

    Oracle索引优化是数据库性能调优的关键环节,它关乎到数据检索速度和整体系统的效率。在Oracle数据库中,索引的种类繁多,包括B*Tree索引、反向索引、降序索引、位图索引和函数索引等。理解并正确使用这些索引类型...

Global site tag (gtag.js) - Google Analytics