您好,登錄后才能下訂單哦!
本文主要給大家簡單講講MySQL邏輯架構入門介紹,相關專業術語大家可以上網查查或者找一些相關書籍補充一下,這里就不涉獵了,我們就直奔主題吧,希望MySQL邏輯架構入門介紹這篇文章可以給大家帶來一些實際幫助。
一、邏輯架構圖
MySQL邏輯架構整體分為四層:
第一層是鏈接線程處理,這一層并非MySQL獨有,在這一層中,主要功能有鏈接處理,授權驗證,安全等操作。
第二層是MySQL主要層,所有的語句解析、分析、優化和緩存都在這一層進行,同時內建函數,如日期、時間等函數也在這一層進行。
第三層中所有的跨存儲引擎的功能都在該層完成,例如視圖、存儲過程等。
第四層為存儲引擎,負責數據的獲取和存儲。在該層提供了許多API供上層服務層調用,完成數據操作。
工作過程:
每一個客戶端發起一個新的請求都會由云服務器端的連接線程處理層接收客戶端的請求并開辟一個新的內存空間,在該空間內生成一個新的線程,當,當每一個用戶連接到云服務器端的時候就會在進程地址空間內生成一個新的線程用于響應客戶端請求,用戶發起的查詢請求都在線程空間內運行,結果也在這里面緩存并返回給云服務器端。最后線程的銷毀和重用都是由連接線程處理管理器完成的。
二、MySQL查詢過程
如下圖所示:
1、客戶端/云服務器通信協議
該部分為半雙工狀態,要么是客戶端向云服務器發送數據,要么是云服務器向半雙工發送數據,二者不能同時進行。
當客戶端向云服務器發送數據時以單獨一個數據包的形式發送,若查詢太大,云服務器會拒絕接收更多的數據,并拋出異常;
當云服務器端向客戶端發送數據包時,一般包括多個數據包。客戶端必須完整的接收所有的數據,不能拒絕接收部分數據只獲取前幾條。在開發過程中應該盡量保持簡單和必要的查詢,這也是減少select *和加上limit限制的原因。
2、查詢緩存
在解析查詢語句之前,如果開啟了查詢緩存,MySQL會檢查當前查詢是否命中緩存中的數據,如果命中會直接將緩存中的數據響應給客戶端,否則會執行后面的解析等操作。
MySQL的緩存存放在一個引用表中,以一個哈希值作為索引。該索引包含了一系列與查詢有關的信息,例如查詢本身、要查詢的表等。如果兩個查詢在任何一個字符上有所不同就不會命中緩存。當然,不是所有的查詢都會存在緩存中,當查詢語句中包含函數、用戶變量、臨時表時就不會存入緩存。例如,一個查詢語句中包含NOW()函數,不同的時間查詢會有不同的查詢結果,存入緩存毫無意義,所以該查詢就不會被存入緩存。
MySQL的緩存也存在失效的狀態,所有會影響查詢結果的信息都會糅合進一個哈希值作為索引,所以當某一個表的數據或者結構發生變化時,該表所涉及到的所有緩存都會失效。即對某表執行寫操作時,該表所涉及到的緩存就會被設置為失效。當查詢緩存非常大時,這個操作會造成較大的系統消耗。在讀操作時,每一個查詢語句執行前都會檢查是否命中緩存,執行后都會存入緩存。是否打開緩存應慎之又慎。
3、語法解析及預處理
語法解析會將查詢語句進行解析生成一顆解析樹,這個過程主要是通過語法進行檢查。預處理會將解析樹再次進行解析,會檢查查詢所包含的表、列等是否存在。
4、查詢優化
一條語句有多中實現方式,優化器的作用就是評估某種執行成本并且選擇成本最小的那一個。當然,我們所預想的執行方式,不一定就是MySQL真正的執行方式。優化器會對執行順序進行重新排序并執行,選出MySQL認為的最優解。
MySQL的查詢優化器是一個非常復雜的部件,它使用了非常多的優化策略來生成一個最優的執行計劃: 1. 重新定義表的關聯順序(多張表關聯查詢時,并不一定按照SQL中指定的順序進行,但有一些技巧可以指定關聯順序)
2. 優化MIN()和MAX()函數(找某列的最小值,如果該列有索引,只需要查找B+Tree索引最左端,反之則可以找到最大值,具體原理見下文)
3. 提前終止查詢(比如:使用Limit時,查找到滿足數量的結果集后會立即終止查詢)
4. 優化排序(在老版本MySQL會使用兩次傳輸排序,即先讀取行指針和需要排序的字段在內存中對其排序,然后再根據排序結果去讀取數據行,而新版本采用的是單次傳輸排序,也就是一次讀取所有的數據行,然后根據給定的列排序。對于I/O密集型應用,效率會高很多)
5、查詢執行引擎
查詢執行引擎會根據優化階段生成的執行計劃,依次執行并給出結果。這些主要實現方式是通過調用存儲引擎的API實現,這些API提供了強大的功能,通過疊加等操作實現查詢。
6、響應給客戶端
無論是否有查詢結果,都會返回給客戶端,包括影響到行數、執行時長等等。
此時若查詢緩存打開,會將查詢結果存入緩存。
當有查詢結果時,返回的結果集是一個增量過程。mysql可能在生成的第一條結果時就會將結果返回給客戶端,客戶端不斷接收直至完畢。服務端無需存儲結果集占用內存客戶端也可以第一時間接收到結果。
MySQL邏輯架構入門介紹就先給大家講到這里,對于其它相關問題大家想要了解的可以持續關注我們的行業資訊。我們的板塊內容每天都會捕捉一些行業新聞及專業知識分享給大家的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。