程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 帶您深入了解Oracle SQL計劃管理

帶您深入了解Oracle SQL計劃管理

編輯:Oracle數據庫基礎

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 中已成為可能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved