设为首页 收藏本站
查看: 1221|回复: 6

[经验分享] Oracle 索引访问方式

[复制链接]

尚未签到

发表于 2013-3-13 08:55:23 | 显示全部楼层 |阅读模式

(1)INDEX UNIQUE SCAN

唯一索引扫描,唯一索引即做单一匹配。在唯一索引中,每个非空键值只有唯一的一条,主键也是唯一索引。示例:

[SQL] 纯文本查看 复制代码
SQL> exec sql_explain('select * from emp where empno=8888');  
Plan hash value: 2949544139  
--------------------------------------------------------------------------------  
------  
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time  
|  
--------------------------------------------------------------------------------  
------  
|   0 | SELECT STATEMENT            |        |     1 |    39 |     1   (0)|  
00:00:01 |  
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    39 |     1   (0)|  
00:00:01 |  
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     0   (0)|  
00:00:01 |  
--------------------------------------------------------------------------------  
------  
Predicate Information (identified by operation id):  
---------------------------------------------------  
2 - access("EMPNO"=8888)  
  
[color=silver][backcolor=rgb(248, 248, 248)][font=Verdana, Geneva, Arial, Helvetica, sans-serif][size=9px][color=rgb(0, 0, 0)][backcolor=rgb(231, 229, 220)][font=Consolas,]PL/SQL 过程已成功完成。 




(2)INDEX RANGE SCAN

非唯一索引扫描,对应唯一索引扫描,索引进行范围匹配,(例如>、<、like等)或进行单一匹配(例如=),示例:


[SQL] 纯文本查看 复制代码
SQL> create table t_xyc as select * from emp;  
  
表已创建。  
SQL> insert into t_xyc  select * from emp;  
  
已创建15行。  
  
SQL> commit;  
  
提交完成。  
SQL> create index xyc_index on t_xyc(empno);  
  
索引已创建。  
---用等号(=)进行单一匹配  
SQL> exec sql_explain('select * from t_xyc where empno=8888');  
Plan hash value: 767710755  
-----------------------------------------------------------------------------------------  
| Id  | Operation                   | Name      | Rows  | Bytes | Cost (%CPU)| Time     |  
-----------------------------------------------------------------------------------------  
|   0 | SELECT STATEMENT            |           |     2 |    78 |     4   (0)| 00:00:01 |  
|   1 |  TABLE ACCESS BY INDEX ROWID| T_XYC     |     2 |    78 |     4   (0)| 00:00:01 |  
|*  2 |   INDEX RANGE SCAN          | XYC_INDEX |     2 |       |     1   (0)| 00:00:01 |  
-----------------------------------------------------------------------------------------  
Predicate Information (identified by operation id):  
---------------------------------------------------  
2 - access("EMPNO"=8888)  
  
PL/SQL 过程已成功完成。  
----用大于(>)进行范围匹配  
SQL> exec sql_explain('select * from t_xyc where empno>8888');  
Plan hash value: 767710755  
-----------------------------------------------------------------------------------------  
| Id  | Operation                   | Name      | Rows  | Bytes | Cost (%CPU)| Time     |  
-----------------------------------------------------------------------------------------  
|   0 | SELECT STATEMENT            |           |     2 |    78 |     4   (0)| 00:00:01 |  
|   1 |  TABLE ACCESS BY INDEX ROWID| T_XYC     |     2 |    78 |     4   (0)| 00:00:01 |  
|*  2 |   INDEX RANGE SCAN          | XYC_INDEX |     2 |       |     1   (0)| 00:00:01 |  
-----------------------------------------------------------------------------------------  
Predicate Information (identified by operation id):  
---------------------------------------------------  
2 - access("EMPNO">8888)  
  
PL/SQL 过程已成功完成。  




(3)INDEX RANGE SCAN (MIN/MAX)

对索引进行范围扫描来获得索引字段的最大或最小值。示例:


[SQL] 纯文本查看 复制代码
SQL> exec sql_explain('select min(empno) from t_xyc where empno>8888');  
Plan hash value: 2706514164  
------------------------------------------------------------------------------------------  
| Id  | Operation                    | Name      | Rows  | Bytes | Cost (%CPU)| Time     |  
------------------------------------------------------------------------------------------  
|   0 | SELECT STATEMENT             |           |     1 |     4 |     1   (0)| 00:00:01 |  
|   1 |  SORT AGGREGATE              |           |     1 |     4 |            |          |  
|   2 |   FIRST ROW                  |           |     1 |     4 |     1   (0)| 00:00:01 |  
|*  3 |    INDEX RANGE SCAN (MIN/MAX)| XYC_INDEX |     1 |     4 |     1   (0)| 00:00:01 |  
------------------------------------------------------------------------------------------  
Predicate Information (identified by operation id):  
---------------------------------------------------  
3 - access("EMPNO">8888)  
  
PL/SQL 过程已成功完成。  




(4)INDEX FAST FULL SCAN

快速完全索引扫描,不按照索引逻辑顺序读取索引数据块,而是以物理顺序读取索引数据库(可以每次读取多个块)。示例:


[SQL] 纯文本查看 复制代码
SQL> begin  
  2  for i in 1..10000 loop  
  3  insert into fast_xyc values(i,'向银春');  
  4  end loop;  
  5  commit;  
  6  end;  
  7  /  
  
PL/SQL 过程已成功完成。  
SQL> create index fast_idx on fast_xyc(id);  
  
索引已创建。  
SQL> exec sql_explain('select id from fast_xyc where id>5');  
Plan hash value: 1029382659  
---------------------------------------------------------------------------------  
| Id  | Operation            | Name     | Rows  | Bytes | Cost (%CPU)| Time     |  
---------------------------------------------------------------------------------  
|   0 | SELECT STATEMENT     |          |  9995 |   126K|     9   (0)| 00:00:01 |  
|*  1 |  INDEX FAST FULL SCAN| FAST_IDX |  9995 |   126K|     9   (0)| 00:00:01 |  
---------------------------------------------------------------------------------  
Predicate Information (identified by operation id):  
---------------------------------------------------  
1 - filter("ID">5)  
Note  
-----  
- dynamic sampling used for this statement (level=2)  
  
[color=silver][backcolor=rgb(248, 248, 248)][font=Verdana, Geneva, Arial, Helvetica, sans-serif][size=9px][color=rgb(0, 0, 0)][backcolor=rgb(231, 229, 220)][font=Consolas,]PL/SQL 过程已成功完成。
  



(6)INDEX FULL SCAN

全索引扫描,即对索引进行完全扫描,它与索引快速全扫描区别在于:

①:它是按照索引数据的逻辑顺序去读,而快速全扫描是按照物理存储顺序读取。

②:它每次只能读取一个数据库,而快速全扫描可以读取多个数据块。


示例:


[SQL] 纯文本查看 复制代码
SQL> set pagesize 0  
SQL> set lines 400  
SQL> set serveroutput on  
SQL> exec sql_explain('select empno from emp');  
Plan hash value: 179099197  
---------------------------------------------------------------------------  
| Id  | Operation        | Name   | Rows  | Bytes | Cost (%CPU)| Time     |  
---------------------------------------------------------------------------  
|   0 | SELECT STATEMENT |        |    15 |    60 |     1   (0)| 00:00:01 |  
|   1 |  INDEX FULL SCAN | PK_EMP |    15 |    60 |     1   (0)| 00:00:01 |  
---------------------------------------------------------------------------  
  
PL/SQL 过程已成功完成。  




(7)INDEX SAMPLE FAST FULL SCAN

索引快速完全采用扫描,以多数据块和物理存储数据读取方式扫描部分数据块。示例:


[SQL] 纯文本查看 复制代码
----sample(10)表示采样10%;  
SQL> exec sql_explain('select id from fast_xyc sample(10) where id>5');  
Plan hash value: 3595809218  
----------------------------------------------------------------------------------------  
| Id  | Operation                   | Name     | Rows  | Bytes | Cost (%CPU)| Time     |  
----------------------------------------------------------------------------------------  
|   0 | SELECT STATEMENT            |          |  1000 | 14000 |     7   (0)| 00:00:01 |  
|*  1 |  INDEX SAMPLE FAST FULL SCAN| FAST_IDX |  1000 | 14000 |     7   (0)| 00:00:01 |  
----------------------------------------------------------------------------------------  
Predicate Information (identified by operation id):  
---------------------------------------------------  
1 - filter("ID">5)  



(8)INDEX FULL SCAN (MIN/MAX)

对索引字段全扫描,以获取索引字段最大,最小值。示例:


[SQL] 纯文本查看 复制代码
SQL> exec sql_explain('select max(empno) from emp');  
Plan hash value: 1707959928  
-------------------------------------------------------------------------------------  
| Id  | Operation                  | Name   | Rows  | Bytes | Cost (%CPU)| Time     |  
-------------------------------------------------------------------------------------  
|   0 | SELECT STATEMENT           |        |     1 |     4 |     1   (0)| 00:00:01 |  
|   1 |  SORT AGGREGATE            |        |     1 |     4 |            |          |  
|   2 |   INDEX FULL SCAN (MIN/MAX)| PK_EMP |     1 |     4 |     1   (0)| 00:00:01 |  
-------------------------------------------------------------------------------------  
  
PL/SQL 过程已成功完成。  




(9)INDEX FULL SCAN DESCENDING

以索引逻辑顺序相反的顺序进行完全扫描

示例:


[SQL] 纯文本查看 复制代码
SQL> exec sql_explain('select * from emp order by empno desc');  
Plan hash value: 3088625055  
--------------------------------------------------------------------------------------  
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |  
--------------------------------------------------------------------------------------  
|   0 | SELECT STATEMENT            |        |    15 |   585 |     2   (0)| 00:00:01 |  
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |    15 |   585 |     2   (0)| 00:00:01 |  
|   2 |   INDEX FULL SCAN DESCENDING| PK_EMP |    15 |       |     1   (0)| 00:00:01 |  
--------------------------------------------------------------------------------------  
  
PL/SQL 过程已成功完成。  



(10)INDEX SKIP SCAN
索引跳跃扫描,在复合索引中,如果后续索引比第一索引唯一性强,而且用后续索引作为过滤条件时,会发生索引跳跃扫描。

示例:


[SQL] 纯文本查看 复制代码
----创建name为第一索引,但是id字段唯一性要强  
SQL> create index fh_index1 on fast_xyc(name,id);  
  
索引已创建。  
  
SQL> exec sql_explain('select * from fast_xyc where id=:A');  
Plan hash value: 3991949787  
------------------------------------------------------------------------------  
| Id  | Operation        | Name      | Rows  | Bytes | Cost (%CPU)| Time     |  
------------------------------------------------------------------------------  
|   0 | SELECT STATEMENT |           |     1 |    15 |     4   (0)| 00:00:01 |  
|*  1 |  INDEX SKIP SCAN | FH_INDEX1 |     1 |    15 |     4   (0)| 00:00:01 |  
------------------------------------------------------------------------------  
Predicate Information (identified by operation id):  
---------------------------------------------------  
1 - access("ID"=TO_NUMBER(:A))  
filter("ID"=TO_NUMBER(:A))  
  
[color=silver][backcolor=rgb(248, 248, 248)][font=Verdana, Geneva, Arial, Helvetica, sans-serif][size=9px][color=rgb(0, 0, 0)][backcolor=rgb(231, 229, 220)][font=Consolas,]PL/SQL 过程已成功完成。 




(11)DOMAIN INDEX

访问域索引(例如全文索引)

示例:


[SQL] 纯文本查看 复制代码
SQL> exec sql_explain('select * from qw_xyc where contains(name,:A)>0');  
Plan hash value: 2774494995  
----------------------------------------------------------------------------------------  
| Id  | Operation                   | Name     | Rows  | Bytes | Cost (%CPU)| Time     |  
----------------------------------------------------------------------------------------  
|   0 | SELECT STATEMENT            |          |   460 | 19780 |    91   (0)| 00:00:02 |  
|   1 |  TABLE ACCESS BY INDEX ROWID| QW_XYC   |   460 | 19780 |    91   (0)| 00:00:02 |  
|*  2 |   DOMAIN INDEX              | QW_INDEX |       |       |     4   (0)| 00:00:01 |  
----------------------------------------------------------------------------------------  
Predicate Information (identified by operation id):  
---------------------------------------------------  
2 - access("CTXSYS"."CONTAINS"("NAME",:A)>0)  
Note  
-----  
- dynamic sampling used for this statement (level=2)  
  
PL/SQL 过程已成功完成。  




(12)BITMAP INDEX SINGLE VALUE

位图索引单值,即对一个键值访问(可以参考上边的B树索引,不举例)。

(13)BITMAP INDEX RANGE SCAN

位图范围扫描(可以参考上边的B树索引,不举例)。

(14)BITMAP INDEX FAST FULL SCAN

位图索引全扫描(可以参考上边的B树索引,不举例)。

(15)BITMAP INDEX FAST FULL SCAN

位图索引快速全扫描(可以参考上边的B树索引,不举例)。



运维网声明 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-3848-1-1.html 上篇帖子: ORA-39700: database must be opened with UPGRADE option 下篇帖子: OEM简介及按钮乱码问题 Oracle
累计签到:315 天
连续签到:1 天
发表于 2013-3-13 09:08:23 | 显示全部楼层
楼主很专业,写得很好!

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

尚未签到

发表于 2013-5-15 22:13:02 | 显示全部楼层
啥时硬件也可以COPY就好了!

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

尚未签到

发表于 2013-5-20 01:44:00 | 显示全部楼层
男人靠的住,母猪能上树!

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

尚未签到

发表于 2013-5-24 19:47:31 | 显示全部楼层

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

尚未签到

发表于 2013-6-1 17:19:53 | 显示全部楼层
恐龙说:“遇到色狼,不慌不忙;遇到禽兽,慢慢享受……”

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

尚未签到

发表于 2013-6-7 09:50:13 | 显示全部楼层
我不在江湖,但江湖中有我的传说。

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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