MySQL之架構簡單分析

来源:https://www.cnblogs.com/dx520/archive/2019/11/09/11826695.html
-Advertisement-
Play Games

上圖為MySQL的簡易架構圖,給您有一個大概的概念,下麵我將為您進行進一步的分析。 連接器: 當連接MySQL資料庫時,等待的將是MySQL服務端的連接器;連接器的職責是和客戶端建立連接、獲取許可權、維持和管理連接。客戶端連接命令一般是如下所示(建議:不要在命令中顯示添加登入密碼): mysql -h ...


 

 

上圖為MySQL的簡易架構圖,給您有一個大概的概念,下麵我將為您進行進一步的分析。

連接器:

當連接MySQL資料庫時,等待的將是MySQL服務端的連接器;連接器的職責是和客戶端建立連接、獲取許可權、維持和管理連接。客戶端連接命令一般是如下所示(建議:不要在命令中顯示添加登入密碼):

mysql -h$ip -p$port -u$user -p$password

查詢緩存:

建立完連接後,就可執行select語句。執行就會走向查詢緩存。

MySQL拿到這個查詢請求後,就會先到緩存中看看,之前是不是執行了該語句。在查詢緩存中數據是以key-value形式存在的,key為執行的查詢請求,value為查詢結果。如果執行了就直接從緩存中把結果返回給客戶端,請求結束。如果語句不在緩存中,就執行後續複雜操作。

在大多數情況下不建議使用查詢緩存,為什麼呢?因為查詢緩存往往弊大於利。

查詢緩存的失效非常頻繁,只要對錶進行了更新,該表的中查詢緩存全部清除。所以往往很多時候,緩存還沒使用就被清除了。對於更新壓力很大的資料庫來說,查詢緩存的命中率很低。如果你的業務中存在一張靜態表,很長時間才會更新一次。比如,系統配置表,那這張表的查詢才適合查詢緩存。

該功能是自動配置的。可以將參數 query_cache_type 設置成 DEMAND ,這樣對於預設的SQL語句就不會使用查詢緩存。而對於確定的查詢語句,可以使用 SQL_CACHE 顯示指定,比如如下語句:

select SQL_CACHE * from t where id = 1;

註意:在MySQL8.0之後的版本,把查詢緩存模塊移除了。

分析器

 在沒有命中查詢緩存後,MySQL開始真正執行語句了。這時MySQL對該語句進行解析。

分析器首先進行詞法分析,一條sql由多個字元串和空格組成,MySQL需要分析出這些字元串是什麼,代表什麼。

做完識別之後,進行語法分析。根據詞法分析的結果,語法分析器會根據語法規則對sql語句進行分析,是否符合MySQL的語法規則。

優化器

執行完分析器後,MySQL就知道該sql語句要乾什麼了。在開始執行之前,要經過優化器的處理。 

優化器在表裡存在多個索引時,選擇執行哪個索引;或者一個語句有多表關聯時(join),選擇各表的連接順序。

執行器

MySQL通過分析器知道了該語句要做什麼,通過優化器知道該怎麼做,於是進入到了執行器階段,開始執行語句。

開始執行之前,首先會判斷用戶是否有對錶的執行許可權(如果是在查詢緩存得到結果,會在返回結果之前進行許可權校驗),如果沒有會報錯.。如果有許可權,就打開表繼續執行語句。打開表的時候,執行器會根據表的引擎定義,去使用引擎提供的介面。

存儲引擎

MySQL區別於其他數據的最具有點的是存儲引擎介面模塊,MySQL可進行插拔存儲引擎。

MySQL的存儲引擎有很多種,比如:InnoDB、MyISAM、ISAM、Memory等。在MySQL5.6之前,預設存儲引擎是MyISAM,而在該版本之後預設的是InnoDB。下表是兩者之前的區別:

  InnoDB

MyISAM

存儲文件

.frm 表定義文件,.ibd 數據文件和索引文件

.frm 表定義文件,.myd 數據文件, .myi 索引文件
表鎖、行鎖 表鎖
事務 支持 不支持
CRUD 讀、寫 讀多
count 掃表 專門存儲的地方
索引結構 B+樹 B+樹

 

近期在學習MySQL資料庫, 後續將會持續更新學習隨筆。

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 解決無法定位軟體包 或 install net-tools 當我們安裝好Linux後,因為裡面有很多功能服務沒有安裝(如ifconfig、vsftpd) 所以出現一些command '***** ' not found,but can be installed with錯誤 我們就會需要安裝來使用, ...
  • 操作文件 創建文件 [root@localhost ~]# touch a.txt # 創建單個文件 [root@localhost ~]# touch b.txt c.txt # 創建多個文件 刪除文件 [root@localhost ~]# rm a.txt # 刪除單個文件 [root@loc ...
  • Mysql Join 連接查詢(中) 認識 就我平時的數據接觸來看, 連接查詢也沒有很複雜,不夠是非常需要耐心和邏輯的, 一點點將數據查出來, 拼接等. 沒有什麼技巧, 多練習就會了. 無非就是 表之間根據共同key來連接, 查詢時結合union, where, 子查詢這些... , 真的不難的, ...
  • 之前,在Codeproject發表過一篇關於用現有表中數據創建Insert的Sql語句的存儲過程,今天將其搬到這裡來,註意本存儲過程僅適用於SQL SERVER。 介紹 一些時候,你想導出一些現有表中記錄的Sql腳本以便你可以插入這些數據到另一個資料庫的相似表中。有很多方式可以做到,現在,我將跟大家 ...
  • create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@c)<>0) begin insert @t( ...
  • 檢測是不是數字型的數據, 兩種方法 1. ISNUMERIC ( expression ) 2. PATINDEX ( ‘%pattern%‘ , expression ) 1. ISNUMERIC ( expression ) 如果是數字類型則返回 1 ,不是則返回 0 但ISNUMERIC有時是 ...
  • 在網上有關Redis相關文章滿天飛的時候,這個時候我決定重溫一下NoSQL。它是什麼,用於解決什麼問題,有哪些相類似的技術,與傳統的關係型資料庫有哪些差別,什麼時候使用?也正如書中所說的,篇幅短小,內容卻很豐富。新技術的誕生,我們應該以既穩健又前瞻的心態看待它。 1. 它是什麼,用於解決什麼問題? ...
  • select *,stuff(select ‘,’ + fieldname from table1 for xml path(”)),1,1,”) as field from table2 for xml path(”) ,自從 SQL Server2005及更高版本提供了一個新查詢語法 ,主要是用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...