oracle 索引的基础知识(一)
索引主要分为以下五种类型:
1、b*tree索引,这种索引的树结构与二叉树比较相似,b*tree索引是基于二叉树的,
由分支块(branch block)和叶子块(leaf block)组成,位于最底层的被称为也块,这些块上包含
索引列的值和行所对应的rowid,分支块用来做导航,包含了索引列的范围值和另一索引块的地址信息;
b*tree中的b是balance的意思。
创建语句:create index index_name on table_name(col1,col2...);
应用场合:多用于OTLP系统;
2、反向索引(reversed key index),这种索引其实就是上述索引的反转,是索引条目更加均匀,
多用于并行服务器,以减少索引也块的争用,缺点是不能在使用常规索引的地方使用,
并且在范围搜索中不能被用。但是它的出现,具有以下优点:
解决了树 倾斜问题;将索引值反向后,新生成的值将非常离散,分散在不同的块中,
这能防止硬盘在某个区域操作过于频繁,引起热点问题;
创建语句:create index index_name on table_name(col1,col2...) reverse;
应用场合:不适合做范围扫描,在特殊的场合下应用能减少块的争用;
3、降序索引。即将索引的值按照desc排序规则来生成,能提高降序查询!
创建语句:create index index_name on table_index(col1 desc,...);
应用场合:很明显应用在有降序查询的语句中;
4、位图索引。多用于OLAP系统,这种索引最好用在cardinality比较低的列,例如性别、组织机构等列。
创建语句:create BITMAP index index_name on table_name(col1,col2...);
应用场合:应用在OLAP和DSS系统中,在低cardinality的列中较为常用,DML过于频繁的语句中不应使用;
5、函数索引。使用函数索引有以下几个要注意的地方:
必须拥有query rewrite或global query rewrite权限;
必须使用基于成本的优化器,基于规则的优化器将被忽略;
query_rewrite_enabled=true 和query_rewrite_intigrity=trusted
这个可以用过show parameter 来查看;
创建语句:create index index_name on table_name(function(col1));
应用场合:应用在有函数索引的语句中。
点评:索引专题是个很复杂的专题,不仅要理论基础学得扎实,实际应用经验也很重要!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26977915/viewspace-734273/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26977915/viewspace-734273/