日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql的sql执行原理图_性能测试MySQL之SQL运行原理

發(fā)布時間:2023/12/2 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql的sql执行原理图_性能测试MySQL之SQL运行原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一,MySQL運行原理

兩個一樣的圖

1,SQL語句執(zhí)行的過程詳細(xì)說明

如上圖所示,當(dāng)向MySQL發(fā)送一個請求的時候,MySQL到底做了什么:

a, 客戶端發(fā)送一條查詢給服務(wù)器。

b, 服務(wù)器先檢查查詢緩存,如果命中了緩存,則立刻返回存儲在緩存中的結(jié)果。否則進(jìn)入下一階段。

c, 服務(wù)器端進(jìn)行SQL解析、預(yù)處理,再由優(yōu)化器生成對應(yīng)的執(zhí)行計劃。

d, MySQL根據(jù)優(yōu)化器生成的執(zhí)行計劃,再調(diào)用存儲引擎的API來執(zhí)行查詢。

e, 將結(jié)果返回給客戶端。

查詢緩存說明;

MySQL查詢緩存保存查詢返回的完整結(jié)構(gòu)。當(dāng)查詢命中該緩存時,MySQL會立刻返回結(jié)果,跳過了解析、優(yōu)化和執(zhí)行階段。

查詢緩存系統(tǒng)會跟蹤查詢中涉及的每個表,如果這些表發(fā)生了變化,那么和這個表相關(guān)的所有緩存數(shù)據(jù)都將失效。

MySQL將緩存存放在一個引用表中,通過一個哈希值引用,這個哈希值包括了以下因素,即查詢本身、當(dāng)前要查詢的數(shù)據(jù)庫、客戶端協(xié)議的版本等一些其他可能影響返回結(jié)果的信息。

當(dāng)判斷緩存是否命中時,MySQL不會進(jìn)行解析查詢語句,而是直接使用SQL語句和客戶端發(fā)送過來的其他原始信息。所以,任何字符上的不同,例如空格、注解等都會導(dǎo)致緩存的不命中。

當(dāng)查詢語句中有一些不確定的數(shù)據(jù)時,則不會被緩存。例如包含函數(shù)NOW()或者CURRENT_DATE()的查詢不會緩存。包含任何用戶自定義函數(shù),存儲函數(shù),用戶變量,臨時表,mysql數(shù)據(jù)庫中的系統(tǒng)表或者包含任何列級別權(quán)限的表,都不會被緩存。

有一點需要注意,MySQL并不是會因為查詢中包含一個不確定的函數(shù)而不檢查查詢緩存,因為檢查查詢緩存之前,MySQL不會解析查詢語句,所以也無法知道語句中是否有不確定的函數(shù)。

事實則是,如果查詢語句中包含任何的不確定的函數(shù),那么其查詢結(jié)果不會被緩存,因為查詢緩存中也無法找到對應(yīng)的緩存結(jié)果。

解析和預(yù)處理說明:

解析器通過關(guān)鍵字將SQL語句進(jìn)行解析,并生成對應(yīng)的解析樹。MySQL解析器將使用MySQL語法規(guī)則驗證和解析查詢。

預(yù)處理器則根據(jù)一些MySQL規(guī)則進(jìn)行進(jìn)一步檢查解析書是否合法,例如檢查數(shù)據(jù)表和數(shù)據(jù)列是否存在,還會解析名字和別名,看看它們是否有歧義

查詢優(yōu)化器說明:

查詢優(yōu)化器會將解析樹轉(zhuǎn)化成執(zhí)行計劃。一條查詢可以有多種執(zhí)行方法,最后都是返回相同結(jié)果。優(yōu)化器的作用就是找到這其中最好的執(zhí)行計劃。

生成執(zhí)行計劃的過程會消耗較多的時間,特別是存在許多可選的執(zhí)行計劃時。如果在一條SQL語句執(zhí)行的過程中將該語句對應(yīng)的最終執(zhí)行計劃進(jìn)行緩存,當(dāng)相似的語句再次被輸入服務(wù)器時,就可以直接使用已緩存的執(zhí)行計劃,從而跳過SQL語句生成執(zhí)行計劃的整個過程,進(jìn)而可以提高語句的執(zhí)行速度。

MySQL使用基于成本的查詢優(yōu)化器(Cost-Based Optimizer,CBO)。它會嘗試預(yù)測一個查詢使用某種執(zhí)行計劃時的成本,并選擇其中成本最少的一個。

優(yōu)化器會根據(jù)優(yōu)化規(guī)則對關(guān)系表達(dá)式進(jìn)行轉(zhuǎn)換,這里的轉(zhuǎn)換是說一個關(guān)系表達(dá)式經(jīng)過優(yōu)化規(guī)則后會生成另外一個關(guān)系表達(dá)式,同時原有表達(dá)式也會保留,經(jīng)過一系列轉(zhuǎn)換后會生成多個執(zhí)行計劃,然后CBO會根據(jù)統(tǒng)計信息和代價模型(Cost Model)計算每個執(zhí)行計劃的Cost,從中挑選Cost最小的執(zhí)行計劃。由上可知,CBO中有兩個依賴:統(tǒng)計信息和代價模型。統(tǒng)計信息的準(zhǔn)確與否、代價模型的合理與否都會影響CBO選擇最優(yōu)計劃

查詢執(zhí)行引擎說明:

在解析和優(yōu)化階段,MySQL將生成查詢對應(yīng)的執(zhí)行計劃,MySQL的查詢執(zhí)行引擎根據(jù)這個執(zhí)行計劃來完成整個查詢。這里執(zhí)行計劃是一個數(shù)據(jù)結(jié)構(gòu),而不是和其他的關(guān)系型數(shù)據(jù)庫那樣生成對應(yīng)的字節(jié)碼

返回結(jié)果給客戶端說明:

如果查詢可以被緩存,那么MySQL在這個階段頁會將結(jié)果存放到查詢緩存中。

MySQL將結(jié)果集返回給客戶端是一個增量、逐步返回的過程。在查詢生成第一條結(jié)果時,MySQL就可以開始向客戶端逐步返回結(jié)果集了

總結(jié)

以上是生活随笔為你收集整理的mysql的sql执行原理图_性能测试MySQL之SQL运行原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。