天天看點

《Oracle高性能SQL引擎剖析:SQL優化與調優機制詳解》一第2章 解讀執行計劃

我們掌握了擷取和顯示執行計劃的方法後,就可以開始了解如何來讀懂一個執行計劃。從我們前面的示例中可以發現,一個執行計劃實際上是一個樹狀關系的結構圖。在這個樹狀結構圖中,每一個節點代表了一個操作(相應的,它們在plan_table、v$sql_plan等執行計劃表、視圖中都有一條記錄),每個支節點(或者說父節點)下都有一個或多個子操作;除根節點外,每個節點都僅隸屬于一個支節點。同一層操作按照它們的id順序執行。操作由頂向下調用,即父操作調用子操作;資料由底向上傳回,即子節點擷取到的資料在處理完成後傳回給父節點。

提示:請執行腳本02_01_sql_explain<版本>.sql建立函數sql_explain,注意區分版本。

從前一章的示例中可以看到,執行計劃包含了相當豐富的資訊。通過執行計劃,我們不僅可以知道sql引擎将以什麼樣的通路順序通路對象、擷取語句的輸出結果,而且還可以獲得優化器估算出的代價結果、運作時間以及其他一些額外資訊。在本章中,将為讀者詳細解釋執行計劃中的内容。閱讀完本章以後,讀者再拿到任何一個語句的執行計劃,都能讀懂該執行計劃的含義,并能通過它傳達給我們的資訊來了解sql執行該語句的過程及性能。

在本章中,我們将會了解到以下内容:

執行計劃中存在哪些基本資料及其具體含義;

執行計劃操作與oracle内部函數之間的關系;

執行計劃中所有列的具體含義;

執行計劃每個資料源操作的具體含義及其示例;

與執行計劃相關的其他資訊含義。