本文主要給大家簡單講講MySQL邏輯架構入門介紹,相關專業(yè)術語大家可以上網(wǎng)查查或者找一些相關書籍補充一下,這里就不涉獵了,我們就直奔主題吧,希望MySQL邏輯架構入門介紹這篇文章可以給大家?guī)硪恍嶋H幫助。
目前成都創(chuàng)新互聯(lián)已為上1000家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)站空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設計、南鄭網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
一、邏輯架構圖
MySQL邏輯架構整體分為四層:
第一層是鏈接線程處理,這一層并非MySQL獨有,在這一層中,主要功能有鏈接處理,授權驗證,安全等操作。
第二層是MySQL主要層,所有的語句解析、分析、優(yōu)化和緩存都在這一層進行,同時內(nèi)建函數(shù),如日期、時間等函數(shù)也在這一層進行。
第三層中所有的跨存儲引擎的功能都在該層完成,例如視圖、存儲過程等。
第四層為存儲引擎,負責數(shù)據(jù)的獲取和存儲。在該層提供了許多API供上層服務層調(diào)用,完成數(shù)據(jù)操作。
工作過程:
每一個客戶端發(fā)起一個新的請求都會由云服務器端的連接線程處理層接收客戶端的請求并開辟一個新的內(nèi)存空間,在該空間內(nèi)生成一個新的線程,當,當每一個用戶連接到云服務器端的時候就會在進程地址空間內(nèi)生成一個新的線程用于響應客戶端請求,用戶發(fā)起的查詢請求都在線程空間內(nèi)運行,結果也在這里面緩存并返回給云服務器端。最后線程的銷毀和重用都是由連接線程處理管理器完成的。
二、MySQL查詢過程
如下圖所示:
1、客戶端/云服務器通信協(xié)議
該部分為半雙工狀態(tài),要么是客戶端向云服務器發(fā)送數(shù)據(jù),要么是云服務器向半雙工發(fā)送數(shù)據(jù),二者不能同時進行。
當客戶端向云服務器發(fā)送數(shù)據(jù)時以單獨一個數(shù)據(jù)包的形式發(fā)送,若查詢太大,云服務器會拒絕接收更多的數(shù)據(jù),并拋出異常;
當云服務器端向客戶端發(fā)送數(shù)據(jù)包時,一般包括多個數(shù)據(jù)包??蛻舳吮仨毻暾慕邮账械臄?shù)據(jù),不能拒絕接收部分數(shù)據(jù)只獲取前幾條。在開發(fā)過程中應該盡量保持簡單和必要的查詢,這也是減少select *和加上limit限制的原因。
2、查詢緩存
在解析查詢語句之前,如果開啟了查詢緩存,MySQL會檢查當前查詢是否命中緩存中的數(shù)據(jù),如果命中會直接將緩存中的數(shù)據(jù)響應給客戶端,否則會執(zhí)行后面的解析等操作。
MySQL的緩存存放在一個引用表中,以一個哈希值作為索引。該索引包含了一系列與查詢有關的信息,例如查詢本身、要查詢的表等。如果兩個查詢在任何一個字符上有所不同就不會命中緩存。當然,不是所有的查詢都會存在緩存中,當查詢語句中包含函數(shù)、用戶變量、臨時表時就不會存入緩存。例如,一個查詢語句中包含NOW()函數(shù),不同的時間查詢會有不同的查詢結果,存入緩存毫無意義,所以該查詢就不會被存入緩存。
MySQL的緩存也存在失效的狀態(tài),所有會影響查詢結果的信息都會糅合進一個哈希值作為索引,所以當某一個表的數(shù)據(jù)或者結構發(fā)生變化時,該表所涉及到的所有緩存都會失效。即對某表執(zhí)行寫操作時,該表所涉及到的緩存就會被設置為失效。當查詢緩存非常大時,這個操作會造成較大的系統(tǒng)消耗。在讀操作時,每一個查詢語句執(zhí)行前都會檢查是否命中緩存,執(zhí)行后都會存入緩存。是否打開緩存應慎之又慎。
3、語法解析及預處理
語法解析會將查詢語句進行解析生成一顆解析樹,這個過程主要是通過語法進行檢查。預處理會將解析樹再次進行解析,會檢查查詢所包含的表、列等是否存在。
4、查詢優(yōu)化
一條語句有多中實現(xiàn)方式,優(yōu)化器的作用就是評估某種執(zhí)行成本并且選擇成本最小的那一個。當然,我們所預想的執(zhí)行方式,不一定就是MySQL真正的執(zhí)行方式。優(yōu)化器會對執(zhí)行順序進行重新排序并執(zhí)行,選出MySQL認為的最優(yōu)解。
MySQL的查詢優(yōu)化器是一個非常復雜的部件,它使用了非常多的優(yōu)化策略來生成一個最優(yōu)的執(zhí)行計劃: 1. 重新定義表的關聯(lián)順序(多張表關聯(lián)查詢時,并不一定按照SQL中指定的順序進行,但有一些技巧可以指定關聯(lián)順序)
2. 優(yōu)化MIN()和MAX()函數(shù)(找某列的最小值,如果該列有索引,只需要查找B+Tree索引最左端,反之則可以找到最大值,具體原理見下文)
3. 提前終止查詢(比如:使用Limit時,查找到滿足數(shù)量的結果集后會立即終止查詢)
4. 優(yōu)化排序(在老版本MySQL會使用兩次傳輸排序,即先讀取行指針和需要排序的字段在內(nèi)存中對其排序,然后再根據(jù)排序結果去讀取數(shù)據(jù)行,而新版本采用的是單次傳輸排序,也就是一次讀取所有的數(shù)據(jù)行,然后根據(jù)給定的列排序。對于I/O密集型應用,效率會高很多)
5、查詢執(zhí)行引擎
查詢執(zhí)行引擎會根據(jù)優(yōu)化階段生成的執(zhí)行計劃,依次執(zhí)行并給出結果。這些主要實現(xiàn)方式是通過調(diào)用存儲引擎的API實現(xiàn),這些API提供了強大的功能,通過疊加等操作實現(xiàn)查詢。
6、響應給客戶端
無論是否有查詢結果,都會返回給客戶端,包括影響到行數(shù)、執(zhí)行時長等等。
此時若查詢緩存打開,會將查詢結果存入緩存。
當有查詢結果時,返回的結果集是一個增量過程。mysql可能在生成的第一條結果時就會將結果返回給客戶端,客戶端不斷接收直至完畢。服務端無需存儲結果集占用內(nèi)存客戶端也可以第一時間接收到結果。
MySQL邏輯架構入門介紹就先給大家講到這里,對于其它相關問題大家想要了解的可以持續(xù)關注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會捕捉一些行業(yè)新聞及專業(yè)知識分享給大家的。
文章標題:MySQL邏輯架構入門介紹
當前網(wǎng)址:http://muchs.cn/article22/gdojjc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供云服務器、動態(tài)網(wǎng)站、靜態(tài)網(wǎng)站、網(wǎng)頁設計公司、微信小程序、電子商務
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)