oracle 11g 执行计划 笛卡尔积 处理
开发说一SQL查不出来,语句很简单,查一个视图,条件就工号,
看执行计划有笛卡尔积: MERGE JOIN CARTESIAN
查视图代码关联条件都是OK的,代码么有错
1, 增加提示 /*+ ordered */ ,2秒出来。
select /*+ ordered */ ... from ..
2, 但是代码没法改,在执行下统计信息收集,
视图对应的表太多了, 查执行计划用到的表 :
select DISTINCT OBJECT_OWNER, OBJECT_NAME
from v$sql_plan
where sql_id ='am8zzd3tqfz67'
AND object_type ='TABLE';
3, 将这些表统计信息收集。
EXEC DBMS_STATS.GATHER_TABLE_STATS('HR','TAB1');
4,将hints /*+ ordered */ 去掉, 2秒出来。
原因:
表统计信息不正确,导致笛卡尔积 MERGE JOIN CARTESIAN