真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何解析MySQL的整體架構(gòu)

本篇文章給大家分享的是有關(guān)如何解析MySQL的整體架構(gòu),小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

成都創(chuàng)新互聯(lián)是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、微信小程序開發(fā)、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動互聯(lián)開發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十載以來,已經(jīng)為數(shù)千家成都混凝土攪拌站各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的數(shù)千家客戶與我們一路同行,見證我們的成長;未來,我們一起分享成功的喜悅。

整體架構(gòu)圖

我們先看一下MySQL的架構(gòu)圖,對其先有一個整體的了解。MySQL主要分為四層架構(gòu),分別是網(wǎng)絡(luò)連接層,服務(wù)層,存儲引擎層,物理層。我們平常寫的SQL語句,以及對SQL語句的優(yōu)化都在服務(wù)層,他其實就是遵循一定的原則使得SQL語句能夠按我們的預(yù)期效果執(zhí)行。

如何解析MySQL的整體架構(gòu)

網(wǎng)絡(luò)連接層

主要負責(zé)連接管理,授權(quán)認證,安全等。每個客戶端連接都對應(yīng)著服務(wù)器上的一個線程。服務(wù)器上維護一個線程池,避免為每個連接創(chuàng)建和銷毀線程。當(dāng)客戶端連接到MySQL服務(wù)器時,服務(wù)器對其進行認證??梢酝ㄟ^用戶名與密碼認證,也可以通過SSL證書進行認證。登錄認證后,服務(wù)器還會驗證客戶端是否有執(zhí)行某個查詢的操作權(quán)限。這一層并不是MySQL所特有的技術(shù)。

服務(wù)層

該層是MySQL的核心,包括查詢緩存,解析器,解析樹,預(yù)處理器,查詢優(yōu)化器。

如何解析MySQL的整體架構(gòu)

  • 查詢緩存

在正式查詢之前,服務(wù)器會檢查查詢緩存,如果能找到對應(yīng)的查詢,則不必進行查詢解析,優(yōu)化,執(zhí)行等過程,直接返回緩存中的結(jié)果集。

  • 解析器和預(yù)處理器

MySQL的解析器會根據(jù)查詢語句,構(gòu)造出一個解析樹,主要用于根據(jù)語法規(guī)則來驗證語句是否正確,比如SQL的關(guān)鍵字是否正確,關(guān)鍵字的順序是否正確。

而預(yù)處理器主要是進一步校驗,比如表名,字段名是否正確等。

  • 查詢優(yōu)化器

查詢優(yōu)化器將解析樹轉(zhuǎn)化為查詢計劃,一般情況下,一條查詢可以有很多種執(zhí)行方式,最終返回相同的結(jié)果,優(yōu)化器就是找到這其中最優(yōu)的執(zhí)行計劃

  • 執(zhí)行計劃

在完成解析和優(yōu)化階段后,MySQL根據(jù)相應(yīng)的執(zhí)行計劃去調(diào)用存儲引擎層提供的相應(yīng)接口來獲取結(jié)果。

存儲引擎層

負責(zé)MySQL數(shù)據(jù)的存儲和提取,是通過提供一系列的接口來屏蔽不同引擎之間的差異。

注意:存儲引擎是針對表的,而不是針對庫。也就是說同一個庫里面的不同表可以擁有不同的存儲引擎。

常見的存儲引擎有兩種,MyISAM和InnoDB,下面我們來看下他們的區(qū)別。

首先,我們先創(chuàng)建一個存儲引擎為MyISAM的test1表。

create table test1(
a INTEGER,
b varchar(10)
)ENGINE=MyISAM;

我們可以去MySQL的相關(guān)目錄看一下他實際存儲的內(nèi)容,發(fā)現(xiàn)他對應(yīng)著三個文件。

如何解析MySQL的整體架構(gòu)

其次,我們再創(chuàng)建一個存儲引擎為InnoDB的test2表。

create table test2(
a INTEGER,
b varchar(10)
)ENGINE=INNODB;

我們再去看一下他實際存儲的內(nèi)容,發(fā)現(xiàn)他對應(yīng)這一個文件。

如何解析MySQL的整體架構(gòu)

那么問題就來了,他的數(shù)據(jù)文件和索引文件存放在哪里啦。這邊先留個問題,下下篇"文件"再說。

物理

將數(shù)據(jù)存放在硬盤上。

如何解析MySQL的整體架構(gòu)

整體流程

我們發(fā)送一條SQL語句,其在MySQL中的整體流程究竟是什么樣的?

  • 用戶先通過Navicat等客戶端與服務(wù)端建立連接,這邊需要用戶名和密碼進行認證,也可以用SSL證書進行認證。

  • 登錄成功后,MySQL會根據(jù)相應(yīng)權(quán)限來判斷該角色是否擁有一些表的權(quán)限等。

  • 如果擁有相關(guān)權(quán)限,當(dāng)用戶發(fā)送一條查詢select語句時,MySQL先查詢緩存,如果已經(jīng)有這條語句的緩存,則直接返回,如果沒有則執(zhí)行下面的流程。如果是更新update,新增insert,刪除delete則不查詢緩存,直接執(zhí)行下面的流程。

  • MySQL會將SQL語句解析為樹,然后對其進行校驗,比如關(guān)鍵字是否正確,關(guān)鍵字順序是否正確,表名是否正確,字段是否正確等。如果認證沒有成功,則直接返回錯誤。如果認證成功了,則直接下面流程。

  • MySQL對解析樹進行查詢優(yōu)化,因為多個SQL可能表達的意思一樣,但是消耗的時間可能差別很大。所以MySQL對針對表的存儲引擎找到最優(yōu)的語句執(zhí)行,也就是生成相應(yīng)的執(zhí)行計劃。

  • 使用上面生成的執(zhí)行計劃,來調(diào)用存儲引擎層的接口。也就是我們平時使用的explain,其可以用來查看是否走索引,消耗的時間等信息。

  • 不同的存儲引擎會到相應(yīng)的物理存儲位置,找到相應(yīng)的數(shù)據(jù),封裝并返回結(jié)果。

  • 如果拿到了結(jié)果集,并且為select語句,MySQL會將結(jié)果放入到緩存中,避免下次再進行相同的操作而造成資源的消耗,同時返回給客戶端結(jié)果,至此,一條SQL語句的執(zhí)行過程結(jié)束啦

以上就是如何解析MySQL的整體架構(gòu),小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


標(biāo)題名稱:如何解析MySQL的整體架構(gòu)
文章轉(zhuǎn)載:http://weahome.cn/article/ipgsgs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部