没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
【IT168 技术文档】索引在各种关系型数据库系统中都是举足轻重的组成部分,
其对于提高检索数据的速度起 至关重要的作用。在 Oracle 中,索引基本分为
以下几种:B*Tree 索引,反向索引,降序索引,位图索引,函数索引,
interMedia 全文索引 等。本文主要就前 6 种索引进行分析,由于 interMedia
全文索引涉及的内容可以单独写一篇文章,所以不在此对其做分析。
首先给出各种索引的简要解释:
b*tree index:几乎所有的关系型数据库中都有 b*tree 类型索引,也是被
最多使用的。其树结构与二叉树比较类似,根据 rid 快速定位所访问的行。
反向索引:反转了 b*tree 索引码中的字节,是索引条目分配更均匀,多用
于并行服务器环境下,用于减少索引叶的竞争。
降序索引:8i 中新出现的索引类型,针对逆向排序的查询。
位图索引:使用位图来管理与数据行的对应关系,多用于 OLAP 系统。
函数索引:这种索引中保存了数据列基于 function 返回的值,在 select *
from table where function(column)=value 这种类型的语句中起作用。
2 各种索引的结构分析
2.1 B*Tree 索引 B*Tree 索引是最常见的索引结构,默认建立的索引就是
这种类型的索引。B*Tree 索引在检索高基数数据列(高基数数据列是指该列
有 很多不同的值)时提供了最好的性能。当取出的行数占总行数比例较小时 B-
Tree 索引比全表检索提供了更有效的方法。但当检查的范围超过表的 10%时
就不 能提高取回数据的性能。B-Tree 索引是基于二叉树的,由分支块
(branch block)和叶块(leaf block)组成。在树结构中,位于最底层底块
被称为叶块,包含每个被索引列的值和行所对应的 rowid。在叶节点的上面是
分支块,用来导航结构,包含了 索引列(关键字)范围和另一索引块的地址。
假设我们要找索引中值为 80 的行,从索引树的最上层入口开始,定位到大
于等于 50,然后往左找,找到第 2 个分支块,定位为 75-100,最后再定位
到叶块 上,找到 80 所对应的 rowid,然后根据 rowid 去读取数据块获取数据。
如果查询条件是范围选择的,比如 where column >20 and column <80,
那么会先定位到第一个包含 20 的叶块,然后横向查找其他的叶块,直到找到
包含 80 的块为止,不用每次都从入口进去再重新定位。
2.2 反向索引
反向索引是 B*Tree 索引的一个分支,它的设计是为了运用在某些特定的环
境下的。Oracle 推出它的主要目的就是为了降低在并行服务器(Oracle
Parallel Server)环境下索引叶块的争用。当 B*Tree 索引中有一列是由递增
的序列号产生的话,那么这些索引信息基本上分布在同一个叶块,当用户修改
或访问 相似的列时,索引块很容易产生争用。反向索引中的索引码将会被分布
到各个索引块中,减少了争用。反向索引反转了索引码中每列的字节,通过
dump()函数 我们可以清楚得看见它做了什么。举个例子:1,2,3 三个连
续的数,用 dump()函数看它们在 Oracle 内部的表示方法。
!"#$ !%
&&&&&&&&&&&&&&&&&&&&&&&
'())*()
'())*()
'())*+()
再对比一下反向以后的情况:
,
,
,
!"#$ !%-#.#-#
&&&&&&&&&&&&&&&&&&&&&&&
'())*()
'())*()
'())*+()
我们发现索引码的结构整个颠倒过来了,这样 1,2,3 个索引码基本上不会出
现在同一个叶块里,所以减少了争用。不过反向索引又一个缺点就是不能在所
有使用常规索引的地方使用。在范围搜索中其不能被使用,例如,where
column>value,因为在索引的叶块中索引码没有分类,所以不能通过搜索相邻
叶块完成区域扫描。
2.3 降序索引
降序索引是 8i 里面新出现的一种索引,是 B*Tree 的另一个衍生物,它的变
化就是列在索引中的储存方式从升序变成了降序,在某些场合下降序索引将会
起作用。举个例子,我们来查询一张表并进行排序:
/01022(,
已选择 22 行。
#34%
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
2##5''6'#!#'748)5977#5)5)22"()+22
27-'7-$#-":5)5)22"()+22
;$#<-6=#567>;$?"'7& ; #5)5)22"()+22
这里优化器首先选择了一个索引范围扫描然后还有一个排序的步骤。如果使用了降
序索引,排序的过程会被取消。
3@?@,,
索引已创建。
(83@?44
索引已分析
再来看下执行路径:
/01022(,
已选择 22 行。
#34%( 执行计划,稍后会讲解如何使用)。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
2##5''6'#!#'748)5977#5)5)22"()+22
2;$#<-6=#567>;$?$#57& ; #5)5)22"()+22
我们看到排序过程消失了,这是因为创建降序索引时 7 已经把数据都按降序排好
了。另外一个需要注意的地方是要设置 @ 里面的 4 参数为 A@@2 或以上,否
则创建时 关键字将被忽略。
2.4 位图索引
位图索引主要用于决策支持系统或静态数据,不支持行级锁定。位图索引最
好用于低 cardinality 列(即列的唯一值除以行数为一个很小的值,接近 零),
例如又一个“性别”列,列值有“Male”,“Female”,“Null”等 3 种,但一共有
300 万条记录,那么 3/3000000 约等于 0,这 种情况下最适合用位图索引。
位图索引可以是简单的(单列)也可以是连接的(多列),但在实践中绝大
多数是简单的。在这些列上多位图索引可以与 AND 或 OR 操作符结合使用。位
图索引使 用位图作为键值,对于表中的每一数据行位图包含了
TRUE(1)、FALSE(0)、或 NULL 值。位图索引的位图存放在 B-Tree 结
剩余15页未读,继续阅读
资源评论
liuli857
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 福袋点点.apk
- Lengyel E. - Foundations of Game Engine Development(卷一卷二合集).zip
- ### 词向量的介绍、使用技巧和优缺点的文章
- 基于STM32F103CBT6单片机GC65+MP2625+CC1101 GPSTrack模块板硬件(原理图+PCB)工程文件
- ### 通道处理过程模拟概念、优缺点和使用技巧
- ### MyBatis动态SQL介绍说明、使用技巧和优缺点
- 上传下载仿163网盘无刷新文件上传 for Jsp-fileupload-jsp.rar
- VMware Workstation业界非常稳定且安全的桌面虚拟机软件-计算机上运行多个操作系统,支持Windows、DOS等
- 基于STM8L101F3P6单片机+LY2508A33P+CC1100遥控器硬件(原理图+PCB)工程文件.zip
- 上传下载WAP图铃下载系统-unimg.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功