MySQL 一 體系結構

2021-10-10 04:58:14 字數 3801 閱讀 2474

一、mysql 體系結構

1、 client connectors 接入方

2、 management serveices & utilities 系統管理和控制工具。例如:備份恢復、mysqldump、 mysql複製集群、分割槽管理

3、 connection pool 連線池。管理緩衝使用者連線、使用者名稱、密碼、許可權校驗、執行緒處理等需要快取的需求 

4、 sql inte***ce sql介面。接受使用者的sql命令,並且返回使用者需要查詢的結果。比如select from就是呼叫sql inte***ce

5、 parser 解析器。sql命令傳遞到解析器的時候會被解析器驗證和解析。解析器是由lex和yacc實現的

6、 optimizer 查詢優化器。sql語句在查詢之前會使用查詢優化器對查詢進行優化

查詢執行的路徑:mysql 客戶端/服務端通訊 ——查詢快取 ——查詢優化處理 ——查詢執行引擎 ——返回客戶端

7、 cache 和 buffer 快取記憶體區。查詢快取,如果查詢快取有命中的查詢結果,查詢語句就可以直接去查詢快取中取資料

8、 pluggable storage engines 外掛程式式儲存引擎。儲存引擎是mysql中具體的與檔案打交道的子系統。也是mysql最具有特色的乙個地方。 mysql的儲存引擎是外掛程式式的

9、 file system 檔案系統。資料、日誌(redo,undo)、索引、錯誤日誌、查詢記錄、慢查詢等

10、mysql 執行一條查詢語句的內部執行過程

1)客戶端先通過聯結器連線到 mysql 伺服器

2)聯結器許可權驗證通過之後,先查詢是否有快取,如果有快取(之前執行過此語句)則直接返回快取資料,如果沒有快取則進入分析器。

3)分析器會對查詢語句進行語法分析和詞法分析,判斷 sql 語法是否正確,如果查詢語法錯誤會直接返回給客戶端錯誤資訊,如果語法正確則進入優化器。

4)優化器是對查詢語句進行優化處理,例如乙個表裡面有多個索引,優化器會判別哪個索引效能更好。

5)優化器執行完就進入執行器,就開始執行語句進行查詢比對,直到查詢到滿足條件的所有資料,然後進行返回。

客戶端——聯結器(許可權驗證)——分析器(解析parser,sql 語法驗證)——優化器(優化處理)——執行器

11、mysql 提示「不存在此列」是執行到解析器階段報出的,因為解析器階段檢查 sql 語句的正確性

12、查詢優化處理的三個階段:

1)解析sql,通過lex詞法分析,yacc語法分析將sql語句解析成解析樹

2)預處理階段,根據mysql的語法的規則進一步檢查解析樹的合法性,如:檢查資料的表和列是否存在,解析名字和別名的設定。還會進行許可權的驗證

3)查詢優化器,優化器的主要作用就是找到最優的執行計畫

13、mysql 查詢快取

1)mysql 查詢快取是發生在聯結器之後的

2)使用場景:以讀為主的業務,資料生成之後就不常改變的業務。比如門戶類、新聞類、報表類、論壇類等

3)快取的內容:sql語句、select操作的結果集

4)判斷標準:與快取的sql語句是否完全一樣,區分大小寫(簡單認為儲存了乙個key-value結構,key為sql,value為sql查詢結果集)

14、mysql 查詢快取的優缺點

優點:效率高,如果已經有快取則會直接返回結果

缺點:任何更新表操作都會清空查詢快取,導致查詢快取非常容易失效,失效太頻繁導致快取命中率比較低

15、查詢快取配置引數為 query_cache_type ,mysql 8.0 之後直接刪除了查詢快取的功能

0:不啟用查詢快取,預設值

1:啟用查詢快取,只要符合查詢快取的要求,客戶端的查詢語句和記錄集都可以快取起來,供其他客戶端使用,加上 sql_no_cache將不快取

2:啟用查詢快取,只要查詢語句中新增了引數 sql_cache,且符合查詢快取的要求,客戶端的查詢語句和記錄集,則可以快取起來,供其他客戶端使用

query_cache_size    最小值為40k,預設1m,推薦設定為:64m/128m

query_cache_limit    限制查詢快取區最大能快取的查詢記錄集,預設1m

16、檢視快取情況的命令:

1)show status like 'qcache%' 

2)show variables like "%cache%" 可以檢視 query_cache_type 的狀態

17、mysql 查詢不快取的情況:

1)當查詢語句中有一些不確定的資料時,則不會被快取。如包含函式now(),current_date()等類似的函式,或者使用者自定義的函式,儲存函式,使用者變數等都不會被快取

2)當查詢的結果大於query_cache_limit設定的值時,結果不會被快取

3)對於innodb引擎來說,當乙個語句在事務中修改了某個表,那麼在這個事務提交之前,所有與這個表相關的查詢都無法被快取。因此長時間執行事務會大大降低快取命中率

4)查詢的表是系統表

5)查詢語句不涉及到表

18、為什麼mysql預設關閉了快取開啟

1)在查詢之前必須先檢查是否命中快取,浪費計算資源

2)如果這個查詢可以被快取,那麼執行完成後,mysql發現查詢快取中沒有這個查詢,則會將結果存入查詢快取,這會帶來額外的系統消耗

3)針對表進行寫入或更新資料時,將對應表的所有快取都設定失效。

4)如果查詢快取很大或者碎片很多時,這個操作可能帶來很大的系統消耗

19、mysql 的常用儲存引擎有 innodb、myisam、memory等,從 mysql 5.5.5 版本開始 innodb 就成為了預設的儲存引擎。

20、innodb 的特性:1)插入緩衝(insert buffer)  2)兩次寫(double write)  3)自適應雜湊索引(adaptive hash index)

21、mysql 可以針對不同的表設定不同的引擎。在 create table 語句中使用 engine=引擎名(比如innodb)來設定此表的儲存引擎。

如:create table student(

id int primary key auto_increment,

username varchar(120),

age int

) engine=innodb

22、innodb 和 myisam 的區別

1)最大的區別是 innodb 支援事務,myisam 不支援事務

2)innodb 支援崩潰後安全恢復,myisam 不支援崩潰後安全恢復

3)innodb 支援行級鎖,myisam 不支援行級鎖,只支援到表鎖

4)innodb 支援外來鍵,myisam 不支援外來鍵

5)innodb 主鍵查詢效能高於 myisam

6)myisam 效能比 innodb 高

7)myisam 支援 fulltext 型別的全文索引,innodb 不支援 fulltext 型別的全文索引,但是 innodb 可以使用 sphinx 外掛程式支援全文索引,並且效果更好

23、一張自增表中有三條資料,刪除兩條資料之後重啟資料庫,再新增一條資料,此時這條資料的 id 是幾

如果這張表的引擎是 myisam,那麼 id=4,如果是 innodb 那麼 id=2(mysql 8 之前的版本)

24、記憶體表,指的是使用 memory 引擎的表,建表語法是 create table … engine=memory。這種表的資料都儲存在記憶體裡,系統重啟的時候會被清空,但是表結構還在。

25、臨時表,可以使用各種引擎型別。使用 innodb 引擎或 myisam 引擎的臨時表,寫資料的時候是寫到磁碟上的

Oracle 筆記(一)體系結構

一 安裝 安裝過程中的幾個關鍵點 全域性資料庫名 系統識別符號 sid,例項名 伺服器引數檔案 spfile 例項名 ora 的配置 server network admin 資料夾下的引數檔案 listener.ora,tnsnames.ora 二 oracle 體系結構 1 例項 例項是後台程序...

mysql 體系結構 了解MySQL體系結構

mysql 資料庫體系結構圖 mysql 由以下幾部分組成 1 connectors 不同語言中與 sql 的互動 show variables like connection variable name value character set connection utf8 collation c...

簡述mysql體系結構 MySQL體系結構

一 mysql登入方式 一 tcp ip方式 遠端 本地 mysql uroot poldboy123 h 10.0.0.51 p3306 二 socket方式 mysql uroot poldboy123 s tmp mysql.sock 二 例項介紹 例項 mysqld後台守護程序 主線程 ma...