搜尋
首頁資料庫mysql教程淺談MySQL的整體架構

淺談MySQL的整體架構

Jun 18, 2019 pm 02:23 PM
mysql

淺談MySQL的整體架構

前言

又是新的一周,各位週一好。

由於換工作,找房子這一系列事情都推在了一起,所以最近停更了一個多月。現在所有的事情都已塵埃落定,我也可以安安靜靜的碼字啦。

好了,也不多說,開始新的旅程啦。最近一直在看《MySQL技術內幕-InnoDB儲存引擎》這本書,也剛好記錄下吧。

整體架構圖

我們先來看看MySQL的架構圖,對其先有一個整體的了解。 MySQL主要分為四層架構,分別是網路連接層,服務層,儲存引擎層,實體層。我們平常寫的SQL語句,以及對SQL語句的最佳化都在服務層,他其實就是遵循一定的原則讓SQL語句能夠依照我們的預期效果執行。

淺談MySQL的整體架構

各部分介紹

網路連線層

主要負責連線管理,授權認證,安全性等。每個客戶端連線都對應著伺服器上的一個執行緒。伺服器上維護一個執行緒池,避免為每個連線建立和銷毀執行緒。當客戶端連接到MySQL伺服器時,伺服器對其進行認證。可以透過使用者名稱與密碼認證,也可以透過SSL憑證進行認證。登入認證後,伺服器也會驗證用戶端是否有執行某個查詢的操作權限。這一層並不是MySQL所特有的技術。

服務層

該層是MySQL的核心,包括查詢緩存,解析器,解析樹,預處理器,查詢最佳化器。

淺談MySQL的整體架構

  • 查詢快取

#在正式查詢之前,伺服器會檢查查詢緩存,如果能找到對應的查詢,則不必進行查詢解析,優化,執行等過程,直接傳回快取中的結果集。

  • 解析器與預處理器

#MySQL的解析器會根據查詢語句,建構出一個解析樹,主要用於根據語法規則來驗證語句是否正確,例如SQL的關鍵字是否正確,關鍵字的順序是否正確。

而預處理器主要是進一步校驗,例如表名,欄位名稱是否正確等。

  • 查詢最佳化器

查詢最佳化器將解析樹轉換為查詢計劃,一般情況下,一條查詢可以有很多種執行方式,最終傳回相同的結果,優化器就是找到這其中最優的執行計劃

  • #執行計劃

在完成解析和最佳化階段後,MySQL會根據對應的執行計畫去呼叫儲存引擎層提供的對應介面來取得結果。

儲存引擎層

負責MySQL資料的儲存和擷取,是透過提供一系列的介面來屏蔽不同引擎之間的差異。

注意:儲存引擎是針對資料表的,而不是針對函式庫。也就是說同一個庫裡面的不同表格可以有不同的儲存引擎。

常見的儲存引擎有兩種,MyISAM和InnoDB,下面我們來看他們的差異。

首先,我們先建立一個儲存引擎為MyISAM的test1表。

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

我們可以去MySQL的相關目錄看一下他實際儲存的內容,發現他對應著三個檔案。

淺談MySQL的整體架構

其次,我們再建立一個儲存引擎為InnoDB的test2表。

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

我們再去看他實際儲存的內容,發現他對應這一個檔案。

淺談MySQL的整體架構

那麼問題就來了,他的資料檔案和索引檔案存放在哪裡啦。這邊先留個問題,下篇"文件"再說。

物理層

將資料存放在硬碟上。

整體流程

我們傳送一條SQL語句,在MySQL中的整體流程究竟是什麼樣的?

  • 使用者先透過Navicat等客戶端與服務端建立連接,這邊需要使用者名稱和密碼進行認證,也可以用SSL憑證進行認證。

  • 登入成功後,MySQL會根據對應權限來判斷角色是否擁有一些表格的權限等。

  • 如果擁有相關權限,當使用者發送一條查詢select語句時,MySQL先查詢緩存,如果已經有這條語句的緩存,則直接傳回,如果沒有則執行下面的流程。如果是更新update,新增insert,刪除delete則不查詢緩存,直接執行下面的流程。

  • MySQL會將SQL語句解析為樹,然後對其進行校驗,例如關鍵字是否正確,關鍵字順序是否正確,表名是否正確,欄位是否正確等。如果認證沒有成功,則直接傳回錯誤。如果認證成功了,則直接下面流程。

  • MySQL對解析樹進行查詢最佳化,因為多個SQL可能表達的意思一樣,但消耗的時間可能差異很大。所以MySQL對針對表的儲存引擎找到最優的語句執行,也就是產生對應的執行計畫。

  • 使用上面產生的執行計劃,來呼叫儲存引擎層的介面。也就是我們平常使用的explain,其可以用來查看是否走索引,消耗的時間等資訊。

  • 不同的儲存引擎會到對應的實體儲存位置,找到對應的數據,封裝並傳回結果。

  • 如果拿到了結果集,並且為select語句,MySQL會將結果放入到快取中,避免下次再進行相同的操作而造成資源的消耗,同時傳回給客戶端結果,至此,一條SQL語句的執行過程結束啦。

  • 更多MySQL相關技術文章,請造訪MySQL教學欄位進行學習!

#

以上是淺談MySQL的整體架構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
在MySQL中使用視圖的局限性是什麼?在MySQL中使用視圖的局限性是什麼?May 14, 2025 am 12:10 AM

mysqlviewshavelimitations:1)他們不使用Supportallsqloperations,限制DatamanipulationThroughViewSwithJoinsOrsubqueries.2)他們canimpactperformance,尤其是withcomplexcomplexclexeriesorlargedatasets.3)

確保您的MySQL數據庫:添加用戶並授予特權確保您的MySQL數據庫:添加用戶並授予特權May 14, 2025 am 12:09 AM

porthusermanagementinmysqliscialforenhancingsEcurityAndsingsmenting效率databaseoperation.1)usecReateusertoAddusers,指定connectionsourcewith@'localhost'or@'%'。

哪些因素會影響我可以在MySQL中使用的觸發器數量?哪些因素會影響我可以在MySQL中使用的觸發器數量?May 14, 2025 am 12:08 AM

mysqldoes notimposeahardlimitontriggers,butacticalfactorsdeterminetheireffactective:1)serverConfiguration impactactStriggerGermanagement; 2)複雜的TriggerSincreaseSySystemsystem load; 3)largertablesslowtriggerperfermance; 4)highConconcConcrencerCancancancancanceTigrignecentign; 5); 5)

mysql:存儲斑點安全嗎?mysql:存儲斑點安全嗎?May 14, 2025 am 12:07 AM

Yes,it'ssafetostoreBLOBdatainMySQL,butconsiderthesefactors:1)StorageSpace:BLOBscanconsumesignificantspace,potentiallyincreasingcostsandslowingperformance.2)Performance:LargerrowsizesduetoBLOBsmayslowdownqueries.3)BackupandRecovery:Theseprocessescanbe

mySQL:通過PHP Web界面添加用戶mySQL:通過PHP Web界面添加用戶May 14, 2025 am 12:04 AM

通過PHP網頁界面添加MySQL用戶可以使用MySQLi擴展。步驟如下:1.連接MySQL數據庫,使用MySQLi擴展。 2.創建用戶,使用CREATEUSER語句,並使用PASSWORD()函數加密密碼。 3.防止SQL注入,使用mysqli_real_escape_string()函數處理用戶輸入。 4.為新用戶分配權限,使用GRANT語句。

mysql:blob和其他無-SQL存儲,有什麼區別?mysql:blob和其他無-SQL存儲,有什麼區別?May 13, 2025 am 12:14 AM

mysql'sblobissuitableForStoringBinaryDataWithInareLationalDatabase,而ilenosqloptionslikemongodb,redis和calablesolutionsolutionsolutionsoluntionsoluntionsolundortionsolunsonstructureddata.blobobobissimplobisslowdeperformberbutslowderformandperformancewithlararengedata;

mySQL添加用戶:語法,選項和安全性最佳實踐mySQL添加用戶:語法,選項和安全性最佳實踐May 13, 2025 am 12:12 AM

toaddauserinmysql,使用:createUser'username'@'host'Indessify'password'; there'showtodoitsecurely:1)choosethehostcarecarefullytocon trolaccess.2)setResourcelimitswithoptionslikemax_queries_per_hour.3)usestrong,iniquepasswords.4)Enforcessl/tlsconnectionswith

MySQL:如何避免字符串數據類型常見錯誤?MySQL:如何避免字符串數據類型常見錯誤?May 13, 2025 am 12:09 AM

toAvoidCommonMistakeswithStringDatatatPesInMysQl,CloseStringTypenuances,chosethirtightType,andManageEngencodingAndCollat​​ionsEttingSefectery.1)usecharforfixed lengengtrings,varchar forvariable-varchar forbariaible length,andtext/blobforlargerdataa.2 seterters seterters seterters

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用