mysql程式塊 Mysql架構與內部模組 第二章

2021-10-18 11:48:38 字數 1515 閱讀 7725

接上文,上文簡述到了mysql中的查詢快取和解析器,今日我們繼續。

先來看一段sql:select * from `jianghuadong`;

先假設我們資料庫中並沒有一張名為jianghuadong的表,那麼這句語句的執行結果是?

首先,這句sql肯定格式上是沒有任何問題的,問題在於查詢的表不存在。也就是你的sql從語義上存在問題。

預處理器

根據以上情況,預處理器會確保欲執行的sql從語義上沒有錯誤,比如:表名,別名,許可權等幾個方面去確保sql正確。

別名錯誤舉例:select b from `jianghuadong` as a;

許可權就是比如你的當前賬號只有select許可權,但是你打算執行一條update語句,那麼預處理器會阻止你幹這件蠢事。

至此,我們的圖在增加乙個模組:

優化器思考乙個問題,給出一條sql語句:select * from `member_info` where age > 21 and *** = 1;

這條sql語句由客戶端傳送到mysql server ,是否server在真正執行的時候,一定就是這條語句?

實際上,mysql server在執行之前,會有乙個叫做優化器的元件,對你的sql進行優化重組,列出盡可能多的語句,然後選擇優化器認為最優(基於成本)的一條進行執行,但是返回的結果

肯定是與你傳送給mysql server的執行結果是一致的。

不只是mysql,市面上的資料庫基本都包含優化器模組。

優化器最主要的作用是優化,比如當你需要聯合查詢的時候,select a from a join b …; 這個時候,到底是先查詢a表還是b表,是由優化器決定的。

其次,優化器還決定了索引的選擇,當一張表存在多個索引的時候,查詢時使用哪個索引,也是由優化器決定。

當你的sql經過優化器進行了一系列的優化後,會生成乙個叫做執行計畫的資料結構,到底先查詢哪張表,使用哪個索引。

實際上,這個執行計畫我們是可以檢視的,在sql語句前加入 explain 命令,舉例說明:

查詢member_info表,可以看到結果中有很多列,包含預計使用索引,實際使用索引等等,這些列的含義我們後面會詳細說明,此處只是簡單介紹執行計畫的作用。

如果你是5.7以上版本,可以新增上format=json執行:explain format=json select * from member_info; 檢視更加詳細的資訊。

思考乙個問題:我們在mysql上的資料,到底是放在**?

從我們的角度,或者邏輯上來說,是放在表中,也可以說是檔案。

儲存引擎

儲存引擎是mysql中比較重要的一環,內容較多,我們另開一章專門聊聊儲存引擎。

mysql架構 MySQL的基礎架構

mysql是關聯式資料庫,關聯式資料庫,顧名思義,是建立在關係模型基礎上的資料庫,我們現實世界中的各種實體以及實體之間的各種聯絡一般可用關係模型來表示。經過數十年的發展,關聯式資料庫在理論和工業實踐中都已經發展到很成熟的地步,可以說,目前的絕大部分應用,使用mysql都有成熟的解決方案。資料庫的架構...

mysql架構介紹 Mysql邏輯架構介紹

總體概覽 和其它資料庫相比,mysql有點與眾不同,它的架構可以在多種不同場景中應用並發揮良好作用。主要體現在儲存引擎的架構上,外掛程式式的儲存引擎架構將查詢處理和其它的系統任務以及資料的儲存提取相分離。這種架構可以根據業務的需求和實際需要選擇合適的儲存引擎。1.連線層 最上層是一些客戶端和連線服務...

mysql經典應用架構 MySQL經典架構

mysql主從複製 此種架構,一般初創企業比較常用,也便於後面步步的擴充套件 此架構特點 1 成本低,佈署快速 方便 2 讀寫分離 3 還能通過及時增加從庫來減少讀庫壓力 4 主庫單點故障 5 資料一致性問題 同步延遲造成 mysql mmm架構 通過 drbd 基於 block 塊的複製模式,快速...