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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM