作者:IT邦德
中國DBA聯盟(ACDU)成員,目前從事DBA及程式程式設計
(Web\java\Python)工作,主要服務于生産制造
現擁有 Oracle 11g OCP/OCM、
Mysql、Oceanbase(OBCA)認證
分布式TBase\TDSQL資料庫、國産達夢資料庫以及紅帽子認證
從業8年DBA工作,在資料庫領域有豐富的經驗
B站主播Oracle、Mysql、PG實戰課程,請搜尋:jeames007
擅長Oracle資料庫運維開發,備份恢複,安裝遷移,性能優化、故障應急處理等。

一、 什麼是優化器
優化器是 SQL 分析和執行的優化工具,他負責制定 SQL 的執行計劃,
比如什麼時候是全表掃描(FTS full table scan),什麼時候是索引範圍搜尋(Index Range
Scan),或者是全索引掃描(INDEX fast full scan,INDEX_FFS);
如果是表于表之間連接配接的時候,它會負責去定表之間以一種什麼樣子的形式來關聯,
比如 HASH_JOIN 還是 NESTED LOOPS 或者是 MERGE JOIN。
這些因素直接決定了 SQL 的執行效率,是以優化器是 SQL 執行的核心!!!
注釋:SQL 執行一定會有代價。
二、 優化器的種類
Rule Based Optimizer(RBO)基于規則,一套死闆的規則來控制資料通路
Cost Based Optimizer(CBO)基于成本,或者講統計資訊,依據一套資料模型,
計算資料通路和處理的成本,選擇最優成本作為執行方案
CBO 方式:它是看語句的代價(Cost),這裡的代價主要指 Cpu 和記憶體。
優化器在判斷是否用這種方式時,主要參照的是表及索引的統計資訊。
統計資訊給出表的大小、有少行、每行的長度等資訊。
這些統計資訊起初在庫内是沒有的,是做完收集統計資訊後才出現的,
很多的時侯過期統計資訊會令優化器做出一個錯誤的執行計劃,因些應及時更新這些資訊。
注意:走索引不一定就是優的,比如一個表隻有兩行資料,
一次 IO 就可以完成全表的檢索,而此時走索引時則需要兩次 IO,
這時全表掃描(full table scan)是最好。
三、CBO優化器的結構
CBO包含以下元件:查詢轉換器、評估器、計劃生成器
3.1 查詢轉換器
改變查詢語句的形式,以産生較好的執行計劃
例如:綁定變量雖然可以有效的減少“硬分析”,Oracle隻允許第一次調用時進行“窺視”,
接下來的調用即使綁定變量的值發生了變化,也仍然是使用第一次生成的執行計劃
3.2 評估器
通過計算三個值來評估計劃的總體成本(累加):
選擇性(Selectivity 0-1之間)
基數(Cardinality)
成本(Cost)
3.3 計劃生成器
計劃生成器的作用就是生成大量的執行計劃,然後選擇其中總體成本最低的一個
如果覺得文章對你有幫助,點贊、收藏、關注、評論,一鍵四連支援
您的批評指正是我寫作的最大動力!
❤️ 技術交流可以 關注公衆号:IT邦德 ❤️