- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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 |
您可能关注的文档
最近下载
- 2024年中级社工法规四色讲义-完整版全189页 .pdf VIP
- 17K408:散热器选用与管道安装.docx VIP
- 2025年湖北省武汉市高考物理四调试卷+答案解析(附后) .pdf VIP
- 合信 COTRUST科创思CTSC-200系列用户手册V1.40.pdf
- 2012湖南公务员考试-公共基础知识.doc VIP
- 二年级语文教师家长会专用.ppt
- 杭州名鑫双氧水有限公司每年10万吨(折27.5%)过氧化氢技术改造项目可行性研究报告.doc
- DB14Z 1-2025 高速公路智慧服务区建设指南.docx
- [城市轨道交通地下段列车运行引起的住宅室内振动与结构噪声限值及测量方法上海市.doc VIP
- SR变更管理程序+变更全套表单 OK.doc
文档评论(0)