oracle hint 简单说明

1.1          hint

根据Merriam-Webster在线字典,hint是一个间接或概要的建议。在Oracle的术语中,hint的定义稍有不同。简单地说,hint是添加到SQL语句中的指令,用来影响查询优化器的判定。换句话说,hint不是仅仅建议某个动作,而是向着该动作推进。在我看来,Oracle选择这个词来命名此功能并不是最佳选择。无论如何,名称并不重要,hint能为你做的才是重要的。不要让名称误导你。

警告 仅因为hint是一个指令,并不代表查询优化器就总是会使用它。或者反过来说,仅因为查询优化器不使用hint,并不代表hint仅仅是一个建议。就像我稍后将介绍的,有些案例里,hint只是不相关或不合法,因此不会影响查询优化器生成的执行计划。

1.1.1      工作原理

1.1.1.1   什么是hint

当处理一条SQL语句时,查询优化器会考虑许多种执行计划。理论上,它会考虑所有可行的执行计划。实际上,除了简单的SQL语句之外,优化器为了保持合理的优化时间,不会考虑太多种组合。因此,查询优化器会根据推断排除某些执行计划。当然,完全忽略一些执行计划的决定很关键,并且这么做查询优化器的可信性也会受到怀疑。

指定一个hint时,你的目的要么是改变执行环境,启用或者禁用某个特性,要么是降低查询优化器需要考虑的执行计划数量。除非改变执行环境,使用hint你将告诉查询优化器,针对某条特定SQL语句应该考虑哪些操作或不应该考虑哪些操作。例如,查询优化器要为以下查询生成执行计划:

select * FROM emp WHERE empno  =  7788;