如何在Oracle中的解释计划中更改要访问的过滤器

时间:2014-08-21 12:06:55

标签: oracle performance oracle11g database-administration

除了少数几个区域外,我有两个几乎相同的查询。 其中一个是需要很长时间才能执行,即需要进行一些性能调整。 与两个查询相比较,发现解释计划中的访问存在于另一个查询的过滤器部分中。请建议如何更改它以访问查询。

分别解释更快查询和更慢查询的计划的最后一部分

287         150 - access("T1"."UNIT_TYPE"=:B1 AND "T1"."OBJECT_ID"=:B2 AND "T1"."PROPERTY_NAME"='X1' AND 
288                       "T1"."PROPERTY_TIMESTAMP"<=:B3)
289                filter("T1"."PROPERTY_VALUE" IS NOT NULL)
290         153 - access("T"."UNIT_TYPE"='G1' AND "T"."PROPERTY_NAME"='property_timestamp')
291                filter("T"."PROPERTY_NAME"='property_timestamp')


253                filter("T1"."PROPERTY_VALUE" IS NOT NULL)
254         132 - access("T1"."UNIT_TYPE"=:B1 AND "T1"."OBJECT_ID"=:B2 AND "T1"."PROPERTY_NAME"='X1' AND 
255                       "T1"."PROPERTY_TIMESTAMP"<=:B3)
256                filter("T1"."PROPERTY_VALUE" IS NOT NULL)
257         135 - filter("T"."PROPERTY_NAME"='property_timestamp' AND "T"."UNIT_TYPE"='G2')

需要像G1一样转换G2

1 个答案:

答案 0 :(得分:0)

“如何更改过滤器以进行访问”是另一种询问“我如何使用索引?”的方法。这是一个有很多答案的常见问题。如果您熟悉术语“访问”和“过滤器”,您可能已经尝试过常用方法,例如收集统计信息和使用配置文件。

修复复杂执行计划的最后手段是使用+outline查找类似执行计划的确切提示集,并将其复制到违规查询中。这可能非常复杂,需要无证件。

+outline选项显示一组完整的提示来修复执行计划。 +alias选项也可能有助于识别对象。

explain plan for select * from dba_objects;

select * from table(dbms_xplan.display(format=>'+outline +alias'));

...

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      INDEX_RS_ASC(@"SEL$3" "S"@"SEL$3" ("SUM$"."OBJ#"))
      FULL(@"SEL$5" "UE"@"SEL$5")
      BATCH_TABLE_ACCESS_BY_ROWID(@"SEL$6" "EO"@"SEL$6")
...
      IGNORE_OPTIM_EMBEDDED_HINTS
      END_OUTLINE_DATA
  */


...

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SET$1        / DBA_OBJECTS@SEL$1
   2 - SET$1       
   3 - SEL$3        / S@SEL$3
   4 - SEL$3        / S@SEL$3
...