- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HINT提高SQL语句的执行效率.doc
HINT提高SQL语句的执行效率
运用HINT提高SQL语句的执行效率
hints是oracle提供的一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划。我们可以用hints来实现:
1) 使用的优化器的类型
2) 基于代价的优化器的优化目标,是all_rows还是first_rows。
3) 表的访问路径,是全表扫描,还是索引扫描,还是直接利用rowid。
4) 表之间的连接类型
5) 表之间的连接顺序
6) 语句的并行程度
1、写HINT目的
手工指定SQL语句的执行计划
hints是oracle提供的一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划。我们可以用hints来实现:
1) 使用的优化器的类型
2) 基于代价的优化器的优化目标,是all_rows还是first_rows。
3) 表的访问路径,是全表扫描,还是索引扫描,还是直接利用rowid。
4) 表之间的连接类型
5) 表之间的连接顺序
6) 语句的并行程度
2、HINT可以基于以下规则产生作用
表连接的顺序、表连接的方法、访问路径、并行度
3、HINT应用范围
dml语句
查询语句
4、语法
+ hint [text] [hint[text]]...
or
--+ hint [text] [hint[text]]...
如果语(句)法不对,则ORACLE会自动忽略所写的HINT,不报错
5、指定优化器模式的HINT
RULE:不管是否有统计信息,都将采用基于规则进行优化;
CHOOSE:只要被访问的数据中有一个表有统计信息,就将采用基于代价的方式进行优化;
FIRST_ROWS:不管是否有统计信息,都将采用基于代价的方式进行优化,其优化目标是最快响应时间;
ALL_ROWS:不管是否有统计信息,都将采用基于代价的方式进行优化,其优化目标是最大吞吐量;
例子:
尽快地显示前10行记录
select + first_rows(10) from emp where deptno=10;
6、指定访问路径的HINT
FULL 执行全表扫描
+ FULL ( table )
ROID 根据ROWID进行扫描
+ ROWID ( table )
INDEX 根据某个索引进行扫描
+ INDEX ( table [index [index]...] )
select + index(emp ind_emp_sal) from emp where deptno=200 and sal300;
如果写了多个,则ORACLE自动选择最优的哪个
select + index(emp ind_emp_sal ind_emp_deptno) from emp where deptno=200 and sal300;
INDEX_JOIN 如果所选的字段都是索引字段(是几个索引的),那么可以通过索引连接就可访问到数据,而不需要访问表的数据。
+ INDEX_JOIN ( table [index [index ...]] )
select + index_join(emp ind_emp_sal ind_emp_deptno) deptno,sal from emp where deptno=20;
INDEX_FFS 执行快速全索引扫描
+ INDEX_FFS ( table [index [index]...] )
select + index_ffs(emp pk_emp) count() from emp;
NO_INDEX 指定不使用哪些索引
+ NO_INDEX ( table [index [index]...] )
select + no_index(emp ind_emp_sal ind_emp_deptno) from emp where deptno=200 and sal300;
AND_EQUAL 指定合并两个或以上索引检索的结果(交集),最多不能超过5个
+ AND_EQUAL ( table index index [index] [index] [index] )
7、指定表的连接顺序
ORDERED 按表出现的顺序进行连接
+ ORDERED
select +ordered emp.ename,dept.dname from dept,emp where emp.deptno=dept.deptno;
select +ordered emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno;
8、指定表的连接操作
USE_NL 按nested loops方式连接
--默认hash join,获取所有数据的
文档评论(0)