`
kidiaoer
  • 浏览: 821907 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

oracle中各种索引的总结

阅读更多
oracle中各种索引的总结

索引在ORACLE SQL-TUNNING中起着重要作用,索引分为B-TREE索引,BITMAP索引两大类,但是特别需要强调的就是索引组织表,clustering这两种最特别的索引!其中用的最多还是B-TREE索引。

1.        B-TREE索引
B-TREE索引是我们平时用的最多,B-TREE顾名思义就是类似树结构,我想学过计算机的同学都应该理解。每个叶子节点存储的格式为:
键值        ROWID
因为在ORACLE数据库中,根据rowid读取数据的速度是最快的。ORACLE先到内存中读取这个ROWID,然后到物理上读取这个ROWID。
a)                UNIQUE INDEXES
唯一索引不仅仅包含unique属性,还包含索引的特性。特别在PRIMARY KEY的时候,我们一般都选择UNIQUE INDEX。
b)                IMPLICIT INDEXES
隐含索引(我不知道,我这样的翻译是否正确),当我们在平时在运行类似一下语句的时候:
Create table vogts(id number,name varchar2(20),address varchar2(300));
ORACLE自动在后台创建一个隐含的索引。
c)        CONCATENATED INDEXES
多重索引。就是将多个字段组合在一起,组成一个索引。但是在组成索引的时候,也必须按照顺序来查询。

测试结果如下:
创建表和索引:
SQL> create table vogts(id number,name varchar2(20),address varchar2(300));

表已创建。
SQL> create index idx_vogts on vogts(id,name);

索引已创建。
插入数据:
SQL> insert into vogts values('1','vogts','hangzhou');

已创建 1 行。

SQL> commit;
二种不同方式查询,即按照:(1)ID查询;(2)
SQL> select id from vogts where id=1 and name = 'vogts';

        ID                                                                     
----------                                                                     
         1                                                                     


执行计划
----------------------------------------------------------                     
Plan hash value: 3883664107                                                     
                                                                                
------------------------------------------------------------------------------  
| Id  | Operation        | Name      | Rows  | Bytes | Cost (%CPU)| Time     |  
------------------------------------------------------------------------------  
|   0 | SELECT STATEMENT |           |     1 |     9 |     1   (0)| 00:00:01 |  
|*  1 |  INDEX RANGE SCAN| IDX_VOGTS |     1 |     9 |     1   (0)| 00:00:01 |  
------------------------------------------------------------------------------  
                                                                                
Predicate Information (identified by operation id):                             
---------------------------------------------------                             
                                                                                
   1 - access("ID"=1 AND "NAME"='vogts')                                       

SQL> select id from vogts where name = 'vogts';

        ID                                                                     
----------                                                                     
         1                                                                     


执行计划
----------------------------------------------------------                     
Plan hash value: 2527835214                                                     
                                                                                
------------------------------------------------------------------------------  
| Id  | Operation        | Name      | Rows  | Bytes | Cost (%CPU)| Time     |  
------------------------------------------------------------------------------  
|   0 | SELECT STATEMENT |           |     1 |     9 |     1   (0)| 00:00:01 |  
|*  1 |  INDEX SKIP SCAN | IDX_VOGTS |     1 |     9 |     1   (0)| 00:00:01 |  
------------------------------------------------------------------------------  
                                                                                
Predicate Information (identified by operation id):                             
---------------------------------------------------                             
                                                                                
   1 - access("NAME"='vogts')                                                   
       filter("NAME"='vogts')                                                   

SQL> spool off;
测试结果告诉我们,如果我建的索引为(A,B)那么,查询条件中,至少要有A,才走索引,否则要走全表扫描。
d)        NULL VALUES
如果索引列中含有NULL值,则不走索引。因为NULL在索引里是不起作用的。你想想索引本身存的就是值和ROWID,这个值就没了,谈什么ROWID?对不?
如果在查询中,条件为 a is null,那么务必将会引起全表扫描!所以在开发人员中,请谨慎使用该条件。
e)        REVERSE INDEX
反向索引。比如普通索引存的是VOGTS,那么反向索引存的是STGOV,reverse索引的优点就是在,当索引存储的非常不合理的时候,使用 reverse index则比较有效。不过一般在index rebuild以后应该没什么问题;
f)        BASED FUNCTION INDEX
索引函数的作用就是,当在查询条件加上函数的时候,还使查询条件继续走索引;

2.        BITMAP索引
位图索引主要是对类别类字段建的索引,若键值超过1000种以后,该索引的效率会明显下降!
其他说明类似B-TREE索引;

3.        索引组织表
索引组织表(OIT organization index table),将表看做是一个索引。普通索引只存储索引类,索引组织表则存储了该表的所有数据。如果该表有额外数据,只是这个BLOCK上挂了别的数据;

4.        CLUSTERING
簇索引,这个不太常用,没有测试过。
分享到:
评论

相关推荐

    oracle约束和索引笔记

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

    ORACLE重建索引总结

    本文主要总结了重建Oracle索引的相关知识点。 一、重建索引的前提条件 当表上的数据频繁进行`UPDATE`和`DELETE`操作,或者执行了`ALTER TABLE ... MOVE`操作导致ROWID改变时,可能需要考虑重建索引。这些操作可能...

    oracle索引失效的总结

    ### Oracle索引失效的原因及解决方法 在Oracle数据库中,索引是提高查询效率的关键工具之一。然而,在实际的应用过程中,由于多种原因可能会导致索引失效,从而影响系统的性能。本文将详细介绍Oracle索引失效的一些...

    oracle创建索引规律总结

    oracle创建索引很好的参考资料,好的索引能够非常大的提高数据库的查询速度

    09 oracle的索引 PPT

    总结,Oracle的索引是提升数据库性能的关键工具,理解索引的工作原理,合理设计和管理索引,能有效优化数据库的查询性能,但同时也要注意其带来的额外存储和维护成本。在实际应用中,需要根据业务需求和查询模式,...

    postgresql和oracle创建空间索引

    标题中的“postgresql和oracle创建空间索引”涉及的是在两种主流的关系型数据库管理系统(RDBMS)中,如何为地理空间数据创建索引的技术。在处理包含地理信息的数据时,如地图坐标、地理位置等,空间索引能显著提高...

    Oracle数据库索引优化方法探析.pdf

    在 Oracle 生产系统中,索引优化是一项重要的工作。 Oracle 数据库管理员需要根据实际情况,选择合适的索引优化方法,提高查询效率和性能。 Oracle 数据库索引优化方法探析还包括 SQL 语句优化方法。 SQL 语句优化...

    Oracle培训 关于索引等详细信息的讲解

    总结,Oracle数据库中的索引是一个复杂而重要的主题,理解并合理运用索引策略是优化数据库性能的关键。在实际工作中,我们需要根据业务需求,结合不同类型的索引,以及数据库的使用模式,做出明智的决策,以实现最佳...

    oracle 视图、索引(自用)

    二、Oracle索引 1. 索引类型:B树索引(默认)、位图索引、函数索引、唯一索引、复合索引、分区索引等。 2. B树索引:最常见的索引类型,适用于经常进行等值查询的列,提供快速查找。 3. 位图索引:适合于低基数(非...

    分区索引,本地索引,全局索引的区别

    在Oracle数据库中,分区索引是针对分区表的一种特殊索引类型,它可以显著提高对于大规模数据集的查询性能。根据索引是否与表的分区策略相匹配,分区索引可以分为两大类:本地索引(Local Index)和全局索引(Global ...

    Oracle解决索引碎片功能.txt

    在Oracle数据库中,索引碎片是指由于频繁的数据插入、删除操作导致索引结构变得不连续和分散的现象。这种现象会降低查询性能,增加数据库维护成本。因此,了解如何识别和解决索引碎片对于优化数据库性能至关重要。 ...

    Oracle 分区表 分区索引

    在Oracle数据库中,分区技术是一种非常有效的管理大型表和索引的方法。通过将一个大的表或索引分成多个较小的部分(分区),可以显著提高查询性能,并简化表和索引的管理。 #### 二、何时使用分区 在决定是否对表...

    oracle 学习心得与总结

    数据库对象是Oracle中的基本组成部分,包括表、视图、索引、存储过程、函数、触发器等。这些对象共同构成了数据库的结构,并支持数据的存储、查询和操作。 2. **表(约束)**: 表是数据库中存储数据的主要结构,...

    oracle rac环境下索引热块的处理思路

    Oracle RAC 环境下索引热块的处理思路 Oracle RAC 环境下索引热块的处理思路是指在 Oracle RAC 环境下,due to the high concurrency and parallelism of multiple instances, the index block contention issue ...

    基于Oracle数据库的索引优化.pdf

    本文总结了基于Oracle数据库的索引优化方法,包括索引的概念、分类、设计和优化原则等。索引的概念是指为加速对表数据的访问而创建的数据段。索引类似于书的目录,包含表的列值和相应的ROW ID。ROW ID是 Oracle ...

    Oracle 索引

    总结来说,Oracle索引是提高数据库查询效率的关键技术,包括B树、位图、函数、唯一和复合等多种类型。理解这些索引的特性和适用场景,以及如何有效地管理它们,对于优化数据库性能和提升应用响应速度具有重要意义。

    Oracle重构索引

    #### 一、Oracle索引重构概述 在日常的数据库维护工作中,我们可能会遇到数据库中的索引变得杂乱无章的情况。这种情况可能会导致查询性能下降,因此对索引进行重构是非常必要的。Oracle提供了多种方法来帮助我们...

    oracle学习总结(适合刚学习oracle的人)

    本文将根据"oracle学习总结(适合刚学习oracle的人)"这一主题,深入探讨Oracle数据库的基础知识,帮助初学者建立起对Oracle的基本理解。 1. **Oracle简介**:Oracle数据库是由美国甲骨文公司开发的一款产品,它...

Global site tag (gtag.js) - Google Analytics