因此,幾周前,我詢問了有關FIRST_ROWS(n)提示的Oracle execution plan cost vs speed。我遇到了類似的問題,但這次是在ORDERED提示下。當我使用提示時,我的執行時間顯着提高(高達90%),但查詢的EXPLAIN PLAN報告顯示成本大幅增加。在這個特定的查詢中,費用從1500到24000.Oracle ORDERED提示成本vs速度
查詢的參數是paramterized,並且連接19個表來獲取數據。我會在這裏發佈它,但是它的長度是585行,並且是爲供應商的混亂,空洞的架構而寫的。除非你碰巧熟悉這個產品的用途,否則看不到它有什麼幫助。但是,在開始調整查詢之前不久,我收集了100%的架構統計信息,因此CBO在這裏並不在黑暗中工作。
我會盡量總結查詢的功能。該查詢實質上返回系統中的對象及其子級,並且構造爲一個直接連接到多個表的大型子查詢塊。第一部分返回對象ID,並且在連接到其他表之前在其查詢塊內分頁。然後,它會連接到包含子ID的幾個表。
我知道CBO並不是全部都知道或者不可信,但是真的讓我很困擾,因爲看到一個執行計劃成本高昂,它違背了我教過的很多東西。使用FIRST_ROWS提示,解決方案是提供一個值n,以便優化器可以可靠地生成執行計劃。 ORDERED提示對我的查詢是否有類似的事情發生?
該查詢真的很大很醜。另外,它違背了供應商的醜陋,混亂的模式,需要很長時間才能解釋每個表中的內容。我添加了一些額外的信息,但希望它會有所幫助。 – monitorjbl
表格統計信息是否最新? –
統計信息是最新的,我在開始嘗試調整查詢之前不久以100%運行它們。 – monitorjbl