About - CONNECT_BY_FILTERING

FangwenYu發表於2013-11-19

再次碰到一個詭異的事情,同樣的SQL在兩個類似資料庫中執行時間相差非常之多。直觀反應就是執行計劃不一樣,果不其然。

在跑得很快的環境中的執行計劃,

 

但是在另外一個環境中的執行計劃卻是,

從執行計劃中可以看到低效的執行計劃的consistent gets相當之高,差別就在於connect by走了 “CONNECT BY NO FILTERING WITH SW(UNIQUE)" 操作,而不是 "CONNECT BY WITH FILTERING(UNIQUE)"操作。

可以用hint - CONNECT_BY_FILTERING 試下,結果執行計劃就變成了,

可以看到執行計劃變了,consistent gets下降得非常之多。

 

其實仔細想想,執行計劃不正確在很多情況下是因為statistics不夠準確。這也能從Note: - dynamic sampling used for this statement (level=2)可以看出來。

嘗試下收集下表上的統計資訊,然後把hint去掉,結果執行計劃就正確了,而且也沒有用dynamic sampling了,

 

 

 ~~~~~~~

See in-depth analysis here -  http://rwijk.blogspot.com/2012/03/connect-by-filtering.html

 

相關文章