- 建立連接(Connector & Connection Pool)
- 通過客戶端/服務(wù)器通信協(xié)議與MySQL建立連接,MySQL客戶端與服務(wù)端的通信方式是”半雙工“。
- "單工"(simplex):單工通信只支持信號在一個方向上傳輸(正向或反向),任何時候不能改變信號的傳輸方向。為保證正確傳送數(shù)據(jù)信號,接收端要對接收的數(shù)據(jù)進(jìn)行校驗(yàn),若校驗(yàn)出錯,則通過監(jiān)控信道發(fā)送請求重發(fā)的信號。
- "半雙工"(half-duplex):半雙工通信允許信號在兩個方向上傳輸,但某一時刻只允許信號在一個信道上單向傳輸。 因此,半雙工通信實(shí)際上是一種可切換方向的單工通信。
- "全雙工"(full-duplex):全雙工通信允許數(shù)據(jù)同時在兩個方向上傳輸,即有兩個信道,因此允許同時進(jìn)行雙向傳輸。 全雙工通信是兩個單工通信方式的結(jié)合,要求收發(fā)雙方都有獨(dú)立的接收和發(fā)送能力。
- 通過客戶端/服務(wù)器通信協(xié)議與MySQL建立連接,MySQL客戶端與服務(wù)端的通信方式是”半雙工“。
-
-
- Id:線程ID
- User:執(zhí)行當(dāng)前線程的用戶
- Host:發(fā)送請求的客戶端IP和端口號
- db:執(zhí)行當(dāng)前線程的數(shù)據(jù)庫
- Command:該線程正在執(zhí)行的操作命令
- Create DB:正在創(chuàng)建庫操作
- Drop DB:正在刪除庫操作
- Execute:正在執(zhí)行一個PreparedSTatement
- Close Stmt:正在關(guān)閉一個PreparedStatement
- Query:正在執(zhí)行一個語句
- Daemon:置后臺
- Time:該線程處于當(dāng)前狀態(tài)的時間,單位s
- State:線程狀態(tài)
- Updating:正在搜索匹配結(jié)果,進(jìn)行修改
- Sleeping:正在等待客戶端發(fā)送新請求
- Starting:正在執(zhí)行請求處理
- Checking table:正在檢查數(shù)據(jù)表
- Closing table:正在將表中數(shù)據(jù)刷新到磁盤中
- Locked:被其他查詢lock
- Sending Data:正在處理select查詢,同時將結(jié)果發(fā)送給客戶端
- Info:記錄線程執(zhí)行的語句,默認(rèn)顯示前100個字符。show full processlist,查看完成的Info信息
-
- 查詢緩存(Cache & Buffer)
- 查看查詢緩存是否啟動、空間大小、限制等
-
- 查看更詳細(xì)的緩存參數(shù),可用緩存空間、緩存塊、緩存占用大小等
-
- 開啟緩存緩存也不會生效的相關(guān)命令
- 查詢語句使用SQL_NO_CACHE
- 查詢結(jié)果大于query_cache_limit設(shè)置
- 查詢中有不確定的參數(shù),比如now()
- 開啟緩存緩存也不會生效的相關(guān)命令
- 解析器(Parser)
- 將客戶端發(fā)送的SQL進(jìn)行語句解析,生成"解析數(shù)"。預(yù)處理器根據(jù)MySQL規(guī)則檢查"解析數(shù)"是否合法,最后生成新的"解析數(shù)"
- 查詢優(yōu)化器(Optimizer)
- 根據(jù)"解析數(shù)"生成最優(yōu)的執(zhí)行計劃。優(yōu)化策略:靜態(tài)優(yōu)化(編譯時優(yōu)化)、動態(tài)優(yōu)化(運(yùn)行時優(yōu)化)。
- 等價變換策略:基于無效查詢(1=1)、變量查詢(a < b and a = 5)、聯(lián)合索引等的優(yōu)化
- 優(yōu)化count、min、max等函數(shù)
- InnoDB引擎min函數(shù)只需要找索引最左邊的數(shù)據(jù)
- InnoDB引擎man函數(shù)只需要找索引最右邊的數(shù)據(jù)
- MyISAM引擎count(*)直接返回
- 提前終止查詢:使用limit查詢,獲取limit所需的數(shù)據(jù)之后,停止遍歷后面的數(shù)據(jù)
- in的優(yōu)化:對in查詢,會先對in中的數(shù)據(jù)進(jìn)行排序,然后再采用二分法查詢數(shù)據(jù)。
- 根據(jù)"解析數(shù)"生成最優(yōu)的執(zhí)行計劃。優(yōu)化策略:靜態(tài)優(yōu)化(編譯時優(yōu)化)、動態(tài)優(yōu)化(運(yùn)行時優(yōu)化)。
- 查詢執(zhí)行引擎
- 負(fù)責(zé)執(zhí)行SQL語句,會根據(jù)表中的存儲引擎類型,以及對應(yīng)的API接口與底層存儲引擎緩存/物理文件交互,得到結(jié)果并返回客戶端。
- 若開啟查詢緩存,會將SQL語句和結(jié)果完整的保存在查詢緩存(Cache & Buffer)中,若再次查詢則直接返回結(jié)果。
- 如果需要返回的結(jié)果過多,則采用增量模式返回。






