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