W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
SQL 引擎從接受 SQL 請(qǐng)求到執(zhí)行的典型流程如下圖所示:
下表為 SQL 請(qǐng)求執(zhí)行流程的步驟說明。
步驟 | 說明 |
Parser(詞法/語法解析模塊) | 在收到用戶發(fā)送的 SQL 請(qǐng)求串后,Parser 會(huì)將字符串分成一個(gè)個(gè)的“單詞”,并根據(jù)預(yù)先設(shè)定好的語法規(guī)則解析整個(gè)請(qǐng)求,將 SQL 請(qǐng)求字符串轉(zhuǎn)換成帶有語法結(jié)構(gòu)信息的內(nèi)存數(shù)據(jù)結(jié)構(gòu),稱為語法樹(Syntax Tree)。 |
Plan Cache(執(zhí)行計(jì)劃緩存模塊) | 執(zhí)行計(jì)劃緩存模塊會(huì)將該 SQL 第一次生成的執(zhí)行計(jì)劃緩存在內(nèi)存中,后續(xù)的執(zhí)行可以反復(fù)執(zhí)行這個(gè)計(jì)劃,避免了重復(fù)查詢優(yōu)化的過程。 |
Resolver(語義解析模塊) | Resolver 將生成的語法樹轉(zhuǎn)換為帶有數(shù)據(jù)庫語義信息的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。在這一過程中,Resolver 將根據(jù)數(shù)據(jù)庫元信息將 SQL 請(qǐng)求中的 Token 翻譯成對(duì)應(yīng)的對(duì)象(例如庫、表、列、索引等),生成的數(shù)據(jù)結(jié)構(gòu)叫做 Statement Tree。 |
Transfomer(邏輯改寫模塊) | 分析用戶 SQL 的語義,并根據(jù)內(nèi)部的規(guī)則或代價(jià)模型,將用戶 SQL 改寫為與之等價(jià)的其他形式,并將其提供給后續(xù)的優(yōu)化器做進(jìn)一步的優(yōu)化。Transformer 的工作方式是在原 Statement Tree 上做等價(jià)變換,變換的結(jié)果仍然是一棵 Statement Tree。 |
Optimizer(優(yōu)化器) | 優(yōu)化器是整個(gè) SQL 請(qǐng)求優(yōu)化的核心,其作用是為 SQL 請(qǐng)求生成最佳的執(zhí)行計(jì)劃。在優(yōu)化過程中,優(yōu)化器需要綜合考慮 SQL 請(qǐng)求的語義、對(duì)象數(shù)據(jù)特征、對(duì)象物理分布等多方面因素,解決訪問路徑選擇、聯(lián)接順序選擇、聯(lián)接算法選擇、分布式計(jì)劃生成等多個(gè)核心問題,最終選擇一個(gè)對(duì)應(yīng)該 SQL 的最佳執(zhí)行計(jì)劃。 |
Code Generator(代碼生成器) | 將執(zhí)行計(jì)劃轉(zhuǎn)換為可執(zhí)行的代碼,但是不做任何優(yōu)化選擇。 |
Executor(執(zhí)行器) |
|
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: