Oracle SQL計劃管理可以改善SQL語句性能,下面就為您詳細介紹Oracle SQL計劃管理方面的知識,供您參考學習之用。
Oracle SQL計劃管理
您看到過多少次下面的情況:一個查詢擁有可能的最佳計劃,但一些事情突然發生,導致該計劃被拋棄。這些事情可能是某人重新對表進行了分析,或者 star_transformation 等影響優化程序的參數被改變 — 各種可能性是無窮無盡的。出於絕望,您可能會禁止對數據庫進行任何更改,這意味著不收集數據庫統計數據、不更改任何參數等等。
但這說起來容易做起來難。當數據模式改變時會發生什麼?以自適應游標一節中顯示的示例為例。現在,CUSTOMERS 表中填充了來自紐約的客戶,因此 STATE_CODE 大部分為 "NY"。因此,當執行含有如下所示謂詞的查詢時:
where state_code = 'CT'
系統執行一次全表掃描而非索引掃描。當謂詞為:
where state_code = 'CT'
由於僅將返回幾行結果,因此系統使用索引。然而,如果模式發生改變 - 假設,突然出現大量來自康涅狄格 (state_code = 'CT') 的客戶,導致含有 CT 的結果的百分比升至 70%,此時會發生什麼?在該情況下,CT 查詢應使用全表掃描。但是,由於您已禁止收集優化程序統計數據,優化程序不會了解模式的更改,並且會繼續提供無效率的索引掃描路徑。您可以做些什麼?
如果 Oracle 使用最優計劃,但在統計數據收集或數據庫參數等底層因素更改時重新評估該計劃,此時,當且僅當新計劃更有效時數據庫才會使用,結果如何?該方案非常理想,不是嗎?它在 Oracle 數據庫 11g 中已成為可能。