共享池之七:執行計劃的生成過程
--------未完待續
生成執行計劃的過程:編譯器:分為三部分:
2.優化器:--包括三個部分
查詢轉換器RBO-->CBO,目前是CBO ,optimizer_mode--ALL_ROWS引數值,適合OLTP。FIRST_ROWS_N適合分頁,OLAP。
查詢轉化器:
檢視合併--檢視時直接用檢視SQL語句對應表做基表進行連線。
謂詞推進,子查詢非巢狀化--相關子查詢;OR--UNION合併
成本估算器:
拿資料字典裡統計資訊,主要有:
表:dba_tab_statistics --行數,塊數
表中欄位:dba_tab_col_statistics --選擇率 selectivity 欄位:number_distinct
索引:dba_ind_statistics 葉塊 高度 聚簇因子
系統評估:CPU IO
資料字典本身:tab$,obj$,col$,con$
內部表:x$bh,x$ksmsp
計劃生成器:訪問路徑--索引OR全表掃描,表連線的型別、順序和方法
Oracle根據提交的SQL語句再查詢相應的資料物件是否有統計資訊。如果有統計資訊的話,那麼CBO將會使用這些統計資訊產生所有可能的執行計劃(可能多達成千上萬個)和相應的Cost,最終選擇Cost最低的那個執行計劃。如果查詢的資料物件無統計資訊,則按RBO的預設規則選擇相應的執行計劃。這個步驟也是解析中最耗費資源的,因此我們應該極力避免硬解析的產生。
3.行源生成器:執行函式--對應執行計劃中
4.執行引擎:
至此,解析的步驟已經全部完成,Oracle將會根據解析產生的執行計劃執行SQL語句和提取相應的資料。
相關文章
- 執行緒池建立執行緒的過程執行緒
- Spring原始碼分析(七)SpringAOP生成代理類及執行的過程Spring原始碼
- Java執行緒池的增長過程Java執行緒
- 簡單的執行緒池(七)執行緒
- 分析執行計劃優化SQLSQL語句處理的過程(轉)優化SQL
- 十六、Mysql之Explain執行計劃MySqlAI
- 獲取執行計劃之Autotrace
- 執行計劃-1:獲取執行計劃
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- jsp的執行過程JS
- 指令的執行過程
- 《Java 高階篇》七:執行緒和執行緒池Java執行緒
- 漫談計算機組成原理(一)之程式執行的過程計算機
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- mysql調優之——執行計劃explainMySqlAI
- MongoDb學習之Explain執行計劃MongoDBAI
- 執行緒池之ScheduledThreadPoolExecutor執行緒thread
- webpack loader 的執行過程Web
- Redis 命令的執行過程Redis
- 二. 執行緒管理之執行緒池執行緒
- Android多執行緒之執行緒池Android執行緒
- 執行緒與執行緒池的那些事之執行緒池篇(萬字長文)執行緒
- 併發程式設計之:執行緒池(一)程式設計執行緒
- Lab_1:練習1——理解通過make生成執行檔案的過程
- Oracle調優之看懂Oracle執行計劃Oracle
- 執行緒池之ScheduledThreadPoolExecutor執行緒池原始碼分析筆記執行緒thread原始碼筆記
- 執行緒池之ThreadPoolExecutor執行緒池原始碼分析筆記執行緒thread原始碼筆記
- Oracle 通過註釋改變執行計劃Oracle
- 多執行緒之共享模型執行緒模型
- MySQL執行計劃MySql
- SYBASE執行計劃
- MySQL 執行計劃MySql
- Java執行緒池之ThreadPoolExecutorJava執行緒thread
- javascript引擎執行的過程的理解--執行階段JavaScript
- 高併發面試:執行緒池的七大引數?手寫一個執行緒池?面試執行緒
- 一條Sql的執行過程SQL
- Javascript中new的執行過程JavaScript
- Java 程式執行過程Java