About - CONNECT_BY_FILTERING

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

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

 

可是在另一個環境中的執行計劃倒是,this

從執行計劃中能夠看到低效的執行計劃的consistent gets至關之高,差異就在於connect by走了 「CONNECT BY NO FILTERING WITH SW(UNIQUE)" 操做,而不是 "CONNECT BY WITH FILTERING(UNIQUE)"操做。3d

能夠用hint - CONNECT_BY_FILTERING 試下,結果執行計劃就變成了,htm

能夠看到執行計劃變了,consistent gets降低得很是之多。blog

 

其實仔細想一想,執行計劃不正確在不少狀況下是由於statistics不夠準確。這也能從Note: - dynamic sampling used for this statement (level=2)能夠看出來。get

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

 

 

 ~~~~~~~im

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

本站公眾號
   歡迎關注本站公眾號,獲取更多信息