如何基于解释计划输出创建优化器提示



有没有办法使用解释计划输出为该执行路径生成一整套优化器提示?或者,更准确地说,有没有办法在不从头开始编写全套提示的情况下稍微调整执行路径?

背景
我是一名数据分析师,试图了解有关 Oracle (11g) 上复杂 SQL 查询的性能调优的更多信息。因此,我习惯于阅读解释计划以查找查询中的缺陷。为了修复这些缺陷,我只能调整我的查询,因为我无权更改我正在使用的表上的索引。我开始使用的一件事,但知之甚少,是优化器提示。当我提示优化器更改执行路径(例如,使用降序而不是默认升序)时,它实际上会这样做,丢弃轮询和缓冲区排序(或任何它所做的)在计划的其他部分。为了防止这种情况,我必须写一套完整的提示,而我首先要寻找的这套提示是解释计划。我希望有一种快速的方法可以稍微改变这个计划并告诉我的查询遵循它。

要回答第一部分,一旦您通过 EXPLAIN PLAN FOR SELECT .... 生成了计划,您就可以使用以下内容查看将保留该计划的完整提示集。

select * from table(dbms_xplan.display(null, null, 'OUTLINE'));

但是,如果您调整这些提示,则确实存在给出相互矛盾的说明的风险。

最新更新