tsql是mysql中的吗_Mysql中的sql是如何执行的
MySQL中的SQL是如何執(zhí)行的
MySQL是典型的C/S架構(gòu),也就是Client/Server架構(gòu),服務(wù)器端程序使用的mysqld.整體的MySQL流程如下圖所示:
MySQL是有三層組成:
連接層: 負(fù)責(zé)客戶端與服務(wù)器端建立連接,客戶端發(fā)送SQL至服務(wù)端;
SQL層: 對(duì)SQL語(yǔ)句進(jìn)行查詢處理;
存儲(chǔ)引擎層: 與數(shù)據(jù)庫(kù)文件打交道,負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和讀取.
其中,SQL層與數(shù)據(jù)庫(kù)文件的存儲(chǔ)方式無關(guān),我們來看下SQL層的架構(gòu):
查詢緩存: Server如果在查詢緩存中發(fā)現(xiàn)了這條SQL語(yǔ)句,就會(huì)直接將結(jié)果返回給客戶端;如果沒有,就進(jìn)入到解析器階段.格外注意的是,因?yàn)椴樵兙彺嫱什桓?所以在MySQL8.0之后就拋棄了緩存.
解析器: 在解析器中對(duì)SQL語(yǔ)句進(jìn)行語(yǔ)法分析和語(yǔ)義分析.
優(yōu)化器: 在優(yōu)化器中會(huì)確定SQL語(yǔ)句的執(zhí)行路徑,比如說是根據(jù)全表檢索,還是根據(jù)索引來檢索等.
執(zhí)行器: 在執(zhí)行前需要判斷用戶是否具備權(quán)限,如果具備權(quán)限就執(zhí)行SQL查詢并返回結(jié)果.在MySQL8.0以下的版本,如果設(shè)置了查詢緩存,這時(shí)會(huì)將查詢結(jié)果進(jìn)行緩存.
SQL語(yǔ)句在MySQL中的流程是: SQL語(yǔ)句 -> 緩存查詢 -> 解析器 -> 優(yōu)化器 -> 執(zhí)行器.
說說存儲(chǔ)引擎,MySQL的存儲(chǔ)引擎采用了插件的方式,每個(gè)存儲(chǔ)引擎都面向一種特定的數(shù)據(jù)庫(kù)應(yīng)用環(huán)境.同事MySQL還允許開發(fā)人員設(shè)置自己的存儲(chǔ)引擎.下面列舉常見的存儲(chǔ)引擎:
InnoDB存儲(chǔ)引擎: 是MySQL5.5.8版本之后默認(rèn)的存儲(chǔ)引擎,最大的特點(diǎn)是支持事務(wù)、行級(jí)鎖定、外鍵約束等.
MyISAM存儲(chǔ)引擎: 在MySQL5.5.8版本之前是默認(rèn)的存儲(chǔ)引擎,不支持事務(wù),也不支持外鍵,最大的特點(diǎn)是速度快,占用資源少.
Memory存儲(chǔ)引擎: 使用系統(tǒng)內(nèi)存作為存儲(chǔ)介質(zhì),以便得到更快的響應(yīng)速度.不過如果mysqld進(jìn)程崩潰,則會(huì)導(dǎo)致所有的數(shù)據(jù)丟失,因此只有當(dāng)數(shù)據(jù)是臨時(shí)數(shù)據(jù)的情況下才會(huì)使用Memory引擎.
NDB存儲(chǔ)引擎: 也叫做NDB Cluster存儲(chǔ)引擎,主要用于MySQL cluster分布式集群環(huán)境,類似于Oracle的RAC集群.
Archive存儲(chǔ)引擎: 有很好的壓縮機(jī)制,用于文件歸檔,在請(qǐng)求寫入時(shí)會(huì)進(jìn)行壓縮,所以經(jīng)常用來做倉(cāng)庫(kù).
注意,數(shù)據(jù)庫(kù)的設(shè)計(jì)在于表的設(shè)計(jì),所以MySQL中每個(gè)表的設(shè)計(jì)都可以采用不同的存儲(chǔ)引擎,可以根據(jù)實(shí)際情況的數(shù)據(jù)處理需要來選擇存儲(chǔ)引擎,這個(gè)是MySQL強(qiáng)大的地方.
數(shù)據(jù)庫(kù)管理系統(tǒng)也是一種軟件
完成的MySQL結(jié)構(gòu)圖如下:
profiling的使用,開啟profiling可以讓MySQL收集在SQL執(zhí)行時(shí)所使用的資源情況,命令如下
select @@profiliong;
返回結(jié)果如果是0表示關(guān)閉,如果是1表示打開.可以使用 set profiling = 1;將profiling打開.
接下來可以執(zhí)行sql語(yǔ)句,然后使用 show profiles來查詢當(dāng)前會(huì)話產(chǎn)生的所有peofiles.
前面會(huì)有query_id,可以使用show profile;獲取上次查詢執(zhí)行的時(shí)間,或者使用show profile for query id;查詢指定的query id執(zhí)行的時(shí)間.
當(dāng)然還有oracle的執(zhí)行過程,這個(gè)暫時(shí)不研究.
總結(jié)
以上是生活随笔為你收集整理的tsql是mysql中的吗_Mysql中的sql是如何执行的的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java PipedOutputStre
- 下一篇: c语言插入排序算法_插入排序算法,流程图