暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
实战Oracle优化器Hint.pdf
101
10页
11次
2024-12-17
免费下载
美河学习在线 www.eimhe.com
实战 Oracle 优化器 Hint
虽然基于成本的优化器在选择正确的优化路径方面和为系统中成千上万的查询利用
引的方面极其精确,可它也并非尽善尽美。为此,Oracle 可以为制定查询提供具体的提示:
否决优化器的决定,以期获得更佳的查询性能。这也是 Oracle 为什么引入 Hint
Hint Oracle 数据库中很有特色的一个功能,是很多 DBA 优化中经常采用的一个手段。
那为什么 Oracle 会考虑引入优化器呢?基于代价的优化器是很聪明的,在绝大多数情况下
它会选择正确的优化器,减轻 DBA 的负担。但有时它也聪明反被聪明误,选择了很差的执
行计划,使某个语句的执行变得奇慢无比。此时就需要 DBA 进行人为的干预,告诉优化
使用指定的存取路径或连接类型生成执行计划,从而使语句高效地运行。Hint 就是 Oracle
提供的一种机制,用来告诉优化器按照告诉它的方式生成执行计划。
当遇到 SQL 执行计划不好的情况,应优先考虑统计信息等问题,而不是直接加 Hint
事。如果统计信息无误,应该考虑物理结构是否合理,即没有合适的索引。只有在最后仍然
不能 SQL 按优化的执行计划执行时,才考虑 Hint。毕竟使用 Hint,需要应用系统修改代码,
Hint 只能解决一条 SQL 的问题,并且由于数据分布的变化或其他原因(如索引更名)等,会导
SQL 再次出现性能问题。
Hint 是比较"暴力"的一种解决方式,不是很优雅。要开发人员手工修改代码。Hint
会去适应新的变化。比如数据结构、数据规模发生了重大变化,但使用 Hint 的语句是感知
变化并产生更优的执行计划。Hint 随着数据库版本的变化,可能会有一些差异、甚至废弃的
情况。此时,语句本身是无感知的,必须人工测试并修正。
提示是 Oracle 为了不破坏和其他数据库引擎之间对 SQL 语句的兼容性而提供的一种扩
展功能。Oracle 决定把提示作为一种特殊的注释来添加。它的特殊性表现在提示必须紧跟着
DELETEINSERTUPDATE MERGE 关键字。换句话说,提示不能像普通注释那样在 SQL
句中随处添加且在注释分隔符之后的第一个字符必须是加号。在后面的用法部分,会详
说明。
Hint 提供的功能非常丰富,可以很灵活地调整语句的执行过程。通过 Hint我们可以调
整:优化器类型,优化器优化目标,数据读取方式(访问路),查询转换类型,表间关联的
顺序,表间关联的类型,并行特性,其他特性
这节课主要介 Hint 的基本语法和使用方法。
1
和优化器相关的
当对优化器为某个语句所制定的基本执行计划不满意时,最好的办法就是通过提示来转
换优化器的模式并观察其转换后的结果,看是否已经达到期望程度。如果只通过转换优化
器的模式就可以获得非常好的执行计划,则就没有必要额外使用更为复杂的提示了。
ALL_ROWS
为实现查询语句整体最优化而引导优化器制定最少成本的执行计划。这个提示会使优
器选择一条可最快检索所有查询行的路径,而代价就是在检索一行数据时,速度很慢。
FIRST_ROWS
为获得最佳响应时间而引导优化器制定最少成本的执行计划。这个提示会使优化器选
美河学习在线 www.eimhe.com
可最出查的第一行(指定)径,价就是检多行就会
慢。利用 FIRST_ROWS 来优化的行数,默认值为 1,这个值介 10 1000 之间,这个使用
FIRST_ROWS(n)的新方法是完全基于代价的方法。它对 n 很敏感,如果 n 值很小,CBO 就会
生成包含嵌套循环以及索引查找的计划;如果 n 很大,CBO 会生成由哈希连接和全表扫描组
成的计划(类似 ALL_ROWS)
CHOOSE
依据 SQL 中所使用到的表的统计信息存在与否来决定使用 RBO 还是 CBO。在 CHOOSE
模式下,如果能够参考表的统计信息,则将按照 ALL_ROWS 方式执行。除非在查询中的所
表都没有经过分析,否则 choose 提示会对整个查询使用基于代价的优化。如果在多表连
中有一个表经过分析过,那么就会对整个查询进行基于代价的优化。
RULE
使用基于规则的优化器来实现最优化执行,即引导优化器根据优先顺序规则来决定查
条件中所使用到的索引或运算符的执行顺序来制定执行计划。这个提示强制 oracle 优先使用
预定义的一组规则,而不是对数据进行统计;同时该提示还会使这个语句避免使用其他提示
除了 DRIVING_SITE ORDERED(不管是否进行基于规则的优化,这两个提示都可使用)
2
和访问路径相关
FULL
告诉优化器通过全表扫描方式访问数据。这个提示只对所指定的表进行全表扫描,而不
是查询中的所有表。FULL 提示可以改善性能。这主要是因为它改变了查询中的驱动表,而
不是因为全表扫描。在使用其他某些提示时,也必须使用 FULL 提示。只有访问整个表时
才可利用 CACHE 提示将表进行缓存。并行组中的某些提示也必须使用全表扫描。
CLUSTER
引导优化器通过扫描聚簇索引来从索引表中读取数据。
HASH
引导优化器按照哈希扫描的方式从表中读取数据。
INDEX
告诉优化器对指定表通过索引的方式访问数据。当访问数据会导致结果集不完整时,
化器将忽略这 Hint
of 10
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜