oracle的索引类型及作用

oracle主要的索引类型有一下几种

B树索引

位图索引

索引组织表

逆序索引

哈希索引

分区索引


B树索引是关系型数据库中基本的索引结构,也是oracle数据库中最常见的索引形式 其定位值按照二叉树的方式定位,从根节点到叶节点,然后叶节点包括rowid rowid就是指向一个行在存储和数据文件的段区块中的位置,有利于精确数据匹配范围匹配的sql


位图索引是按“位”来索引表中的记录,比b tree索引创建和使用块,在根据键值做and,or或 in(x,y,..)查询时,直接用索引的位图进行或运算,快速得出结果行数据.主要针对大量相同值的列而创建,索引块的一个索引行中存储键值和起止Rowid,以及这些键值的位置编码,位置编码中的每一位表示键值对应的数据行的有无.一个块可能指向的是几十甚至成百上千行数据的位置.如果在DML操作比较频繁的表中使用位图索引,会导致大量的锁等待或者出现死锁的现象!


索引组织表按照B tree的所有方式存储,和别的索引一样会接受DSL,DML,DDL语句的访问,索引组织表有利于基于表主键列访问的应用,键列是唯一的,因此索引组织表所需的存储空间也想当小,从而降低了IO!


逆序索引:数据列的数据是单调而连续递增的,且物理存储接近,同时是有序和连续的,而在索引连续和表数据连续的情况下同时IO操作的话回造成io瓶颈,而逆序索引就是解决了这个问题


函数索引:在oracle的优化器不能对已经进行了函数处理的where条件设置索引扫描路径,例如:select a,b from table where function(aaa)=:y; 就需要建立function(aaa)的函数索引,函数索引的如果建立的不适当,会造成很大的弊端


哈希索引:对于oracle的簇表而言,在创建簇之前,需要先行创建一个哈希索引


分区索引:分区表的索引可能被分区处理,用于索引那些分区的数据


###################################

本文整理自oracle数据库性能优化的艺术和网络

作者:john

转载请注明出处

你可能感兴趣的:(Oracle)