网站大量收购独家精品文档,联系QQ:2885784924

oracle的hint探讨--add_equal,index_join,index_combine.doc

oracle的hint探讨--add_equal,index_join,index_combine.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
oracle的hint探讨--add_equal,index_join,index_combine

and_equal,index_join,index_combine这三种都是oracle利用索引关联获得数据的方法,三者的目的都是为了最大限度的利用索引,减少回表的代价.但是三者的实现方法是有区别的,下面一一来分析. and_equal: 这种方式需要查询条件里面包括所有索引列,然后取得每个索引中得到的rowid列表,然后对这些列表做merge join,过滤出相同的rowid后再去表中获取数据或者直接从索引中获得数据. and_equal有一些限制,比如它只对单列索引有效,只对非唯一索引有效,使用到的索引不能超过5个,查询条件只能是”=”.在10g中,and_equal已经被废弃了,只能通过hint才能生效. 涉及索引满足and_equal的限制条件的情况 create table test as select * from dba_objects; create index ind_test_owner on test(owner); create index ind_test_object_name on test(object_name); SELECT /*+ and_equal(test ind_test_owner ind_test_object_name)*/ OWNER, OBJECT_NAME FROM TEST WHERE OWNER = TEST AND OBJECT_NAME = TEST; 由于涉及到的索引都为单列索引,且所有索引都在查询中出现,谓词也都是使用=关系符号连接,所以我们可以看到add_equal索引生效.执行计划如下所示. Execution Plan ———————————————————- ——————————————————————————- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| 棗棗棗棗棗棗棗棗棗棗棗棗棗- | 0 | SELECT STATEMENT | | 1 | 29 |ROM TEST WH 2 (0)| |* 1 | AND-EQUAL | | | | | |* 2 | INDEX RANGE SCAN| IND_TEST_OWNER | 1 | | 1 (0)| |* 3 | INDEX RANGE SCAN| IND_TEST_OBJECT_NAME | 2 | | 1 (0)| 棗棗棗棗棗棗棗棗棗棗棗棗棗- 如果查询条件只包含owner SELECT /*+ and_equal(test ind_test_owner ind_test_object_name)*/ OWNER, OBJECT_NAME FROM TEST WHERE OWNER = TEST 本例中只使用到了hint中的一个索引关联的列owner,所以导致and_equal提示无效.执行计划中只使用了一个索引. Execution Plan ———————————————————- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| ———————————————————————————– | 0 | SELECT STATEMENT | | 1 | 29 | 2 (0)| | 1 | TABLE ACCESS BY INDEX ROWID| TEST | 1 | 29 | 2 (0)| |* 2 | INDEX RANGE SCAN | IND_TEST_OWNER | 1 | | 1 (0)| ———————————————————————————– 查询条件是””的情况 SELECT /*+ and_equal(test ind_test_owner ind_test_object_name)*/ OWNER, OBJECT_NAME FROM TEST WHERE OWNER = TEST AND OBJECT_NAME TEST; 本例中由于查询谓词中对列object_name使用了符号,所以也会导致and_equal提示无效. Execution Plan ———————————————————- —————————————————————棗棗棗棗?| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| 棗棗棗棗棗棗棗棗棗棗棗棗棗棗棖 | 0 | SELECT STATEMENT | | 1 | 40 | 2 (0)| |* 1 | TALE ACCESS BY INDEX RBLE ACCESS BY INDEX ROWID| TEST |

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档