`
kidiaoer
  • 浏览: 805802 次
  • 性别: 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重建索引总结

    4、索引高度:索引高度是指由于数据行的插入操作而产生的索引层数,当表中添加大量数据时,oracle将生成索引的新层次以适应加入的数据行,因此,oracle索引可能有4层,但是这只会出现在索引数中产生大量插入操作的...

    oracle索引失效的总结

    oracle索引失效的总结

    oracle创建索引规律总结

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

    Oracle分区表及分区索引

    总结描述Oracle 11g分区表的种类及分区索引的类型。范围分区,列表分区,散列分区,组合分区,哈希分区,全局索引,分区索引

    索引优化原则及Oracle中索引总结

    Oracle索引建立原则  · 确定针对该表的操作是大量的查询操作还是大量的增删改操作。  · 尝试建立索引来帮助特定的查询。检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引。  · where语句中...

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

    这是我学习oracle后的学习总结,里面很多东西还是很有用的,时候刚学习oracle 的人

    深入oracle分区索引的详解

    表可以按range、hash、list分区,表分区后,其上的索引和普通表上的索引有所不同,oracle对于分区表上的索引分为2类,即局部索引和全局索引,下面分别对这2种索引的特点和局限性做个总结。局部索引local index1.局部...

    关于oracle的表空间,分区表,以及索引的总结

    关于oracle的表空间,分区表,以及索引的总结

    Oracle关于重建索引争论的总结

    当然Oracle官方也有自己的观点,我们很多DBA也是遵循这一准则来重建索引,那就是Oracle建议对于索引深度超过4级以及已删除的索引条目至少占有现有索引条目总数的20% 这2种情形下需要重建索引。近来Oracle也提出了...

    Oracle执行计划不走索引的原因总结

    在Oracle数据库操作中,为什么有时一个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢?如何解决呢?本文我们主要介绍这部分内容,接下来让我们一起来了解一下。  不走索引大体有以下几个原因: ...

    数据库索引总结

    sqlserver oracle 数据库中索引的使用总结,分类描述索引类别及使用。

    oracle 10g问题总结

    oracle 10g问题总结 1. 查询oracle中所有用户信息 select * from dba_users; 2. 只查询用户和密码 select username,password from dba_users; 3. 查询当前用户信息 select * from dba_ustats; 4. 查询...

    Oracle数据库基于索引SQL优化方法的研究与实现

    在系统分析了Oracle数据库索引特点的基础上, 要注意的问题进行了总结,进行了一些新的探索和尝试, ...对如何使用SQL语句的索引对数据库进行优化的实现方法中 提出了Oracle数据库SQL优化的其它注意问题。

    oracle学习日志总结

    4. Select 中 避免使用*, oracle需要转换成表的列,通过查询数据字典获得,耗费时间). 5. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序尽可能的让字段顺序与索引顺序...

    ORACLE性能优化总结

    关于ORACLE的性能优化总结PPT,涉及到ORACLE体系结构、索引、数据字典、执行计划等。

    Oracle复合索引与空值的索引使用问题小结

    于是手动测试,环境采用Oracle自带的scott用户下的emp表。 1.首先查看如下语句的执行计划(此时表只有主键索引): 2.添加IX_TEST(deptno,comm)后查看执行计划: 发现依然是全表扫描。 3.为deptno列添加非空约束...

    Oracle索引(B*tree与Bitmap)的学习总结

    本篇文章是对Oracle索引(B*tree与Bitmap)进行了详细的分析介绍,需要的朋友参考下

    oracle书籍库总结

    oracle数据库总结,从表空间到索引 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Global site tag (gtag.js) - Google Analytics