1. 程式人生 > 其它 >1. MySQL基礎架構解析

1. MySQL基礎架構解析

Mysql基礎架構

mysql基礎架構

MySQL主要分為Server層和儲存引擎層兩部分

  • Server層有聯結器,分析器,優化器,執行器
  • 儲存引擎層負責資料的儲存和提取

Server層

聯結器

負責跟客戶端建立連線,獲取許可權,維持和管理連線

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

mysql是客戶端工具,用來跟服務端建立連線

mysql是客戶端,mysqld是伺服器程式,在計算機中,都是一個程序,Mysql伺服器程式的程序稱為MySQL資料庫例項,簡稱資料庫例項
每個程序都有唯一的編號,程序ID,英文是PID,MySQL伺服器程序的預設名稱就是mysqld,客戶端程序的預設名稱是mysql

查詢快取

不推薦使用,MySQL8.0之後整塊刪除掉

分析器

  • 詞法分析

    SQL語句是多個字串和空格組成的,就需要識別出來字串是什麼,代表什麼

    select * from T where ID = 10;

    字串”T“就識別成“表名T”,字串”ID“就識別成“列ID”

  • 語法分析

    判斷這個SQL語句是否滿足MySQL語法

    常見錯誤

1. You have an error in you SQL syntax;check...
2. Unknown column 'k' in 'where clause'

優化器

  • 在表中有多個索引的時候,優化器來決定使用哪個索引
  • 有join關聯查詢的時候,決定表的連線順序

執行器

會先判斷對錶T有沒有執行查詢的許可權

開啟表的時候,執行器根據表的引擎定義,呼叫引擎提供的介面

select * from T where id=10;
如果id上沒有索引過程:
1.呼叫Innodb引擎介面取這個表的第一行,判斷id是不是10,如果不是就跳過,如果是則將結果存在結果集中
2.呼叫引擎介面取下一行資料,重複上面的判斷,一直取到這個表的最後一行
3.執行器將上述便利過程中滿足條件的資料組成的記錄集作為結果集返回給客戶端
如果id上有索引
1.呼叫Innodb引擎介面取第一個滿足id=10的第一行,之後迴圈取滿足條件的下一行,直到結束

慢日誌操作

show variables like "%query%";

慢日誌中的Rows_examined值

Rows_examined是執行器每次請求引擎時的獲取的行數總和,

有的場景,執行器呼叫一次,引擎內部則掃描了多行,因此引擎掃描行數和rows_examined的值並不完全相同

本文來自部落格園,作者:穆彪的Object,轉載請註明原文連結:https://www.cnblogs.com/mubiao-object/p/15844657.html