開發說一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