设为首页 收藏本站
查看: 979|回复: 0

[经验分享] oracle中各种索引的总结

[复制链接]

尚未签到

发表于 2016-7-24 12:03:30 | 显示全部楼层 |阅读模式
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
簇索引,这个不太常用,没有测试过。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-248611-1-1.html 上篇帖子: Oracle数据导入导出IMP/EXP [转] 下篇帖子: Oracle触发器语法及实例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表