MySQL 一 體系結構
一、MySQL 體系結構
1、 Client Connectors 接入方
2、 Management Serveices & Utilities 系統管理和控制工具。例如:備份恢復、mysqldump、 mysql複製叢集、分割槽管理
3、 Connection Pool 連線池。管理緩衝使用者連線、使用者名稱、密碼、許可權校驗、執行緒處理等需要快取的需求
4、 SQL Interface SQL介面。接受使用者的SQL命令,並且返回使用者需要查詢的結果。比如select from就是呼叫SQL Interface
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客戶端與服務端的通訊方式是“半雙工”;半雙工通訊:在任何一個時刻,要麼是有伺服器向客戶端傳送資料,要麼是客戶端向服務端傳送資料,這兩個動作不能同時發生。
所以我們無法也無需將一個訊息切成小塊進行傳輸
14、檢視命令 show full processlist / show processlist 可通過kill {id}的方式進行連線的殺掉
Sleep 執行緒正在等待客戶端傳送資料
Query 連線執行緒正在執行查詢
Locked 執行緒正在等待表鎖的釋放
Sorting result 執行緒正在對結果進行排序
Sending data 向請求端返回資料
15、MySQL 查詢快取的內容:SQL語句、SELECT操作的結果集。新的SELECT語句先去查詢快取,判斷是否存在可用的記錄集
16、判斷標準:與快取的SQL語句是否完全一樣,區分大小寫(簡單認為儲存了一個key-value結構,key為sql,value為sql查詢結果集)
17、使用場景:以讀為主的業務,資料生成之後就不常改變的業務。比如門戶類、新聞類、報表類、論壇類等
18、MySQL 查詢快取的優缺點
優點:效率高,如果已經有快取則會直接返回結果
缺點:任何更新表操作都會清空查詢快取,導致查詢快取非常容易失效,失效太頻繁導致快取命中率比較低
19、MySQL 查詢快取配置引數為 query_cache_type ,值為 DEMAND(按需使用),MySQL 8.0 之後直接刪除了查詢快取的功能
0:不啟用查詢快取,預設值
1:啟用查詢快取,只要符合查詢快取的要求,客戶端的查詢語句和記錄集都可以快取起來,供其他客戶端使用,加上 SQL_NO_CACHE將不快取
2:啟用查詢快取,只要查詢語句中新增了引數 SQL_CACHE,且符合查詢快取的要求,客戶端的查詢語句和記錄集,則可以快取起來,供其他客戶端使用
20、show status like 'Qcache%' 命令可檢視快取情況
21、SHOW VARIABLES LIKE "%cache%" 可以檢視 query_cache_type 的狀態
22、query_cache_size 最小值為40K,預設1M,推薦設定為:64M/128M
23、query_cache_limit 限制查詢快取區最大能快取的查詢記錄集,預設1M
24、MySQL 查詢快取是發生在聯結器之後的
25、MySQL 查詢不快取的情況:
1)當查詢語句中有一些不確定的資料時,則不會被快取。如包含函式NOW(),CURRENT_DATE()等類似的函式,或者使用者自定義的函式,儲存函式,使用者變數等都不會被快取
2)當查詢的結果大於query_cache_limit設定的值時,結果不會被快取
3)對於InnoDB引擎來說,當一個語句在事務中修改了某個表,那麼在這個事務提交之前,所有與這個表相關的查詢都無法被快取。因此長時間執行事務會大大降低快取命中率
4)查詢的表是系統表
5)查詢語句不涉及到表
26、為什麼mysql預設關閉了快取開啟
1)在查詢之前必須先檢查是否命中快取,浪費計算資源
2)如果這個查詢可以被快取,那麼執行完成後,MySQL發現查詢快取中沒有這個查詢,則會將結果存入查詢快取,這會帶來額外的系統消耗
3)針對表進行寫入或更新資料時,將對應表的所有快取都設定失效。
4)如果查詢快取很大或者碎片很多時,這個操作可能帶來很大的系統消耗
27、MySQL 的常用儲存引擎有 InnoDB、MyISAM、Memory等,從 MySQL 5.5.5 版本開始 InnoDB 就成為了預設的儲存引擎。
28、InnoDB 的特性:1)插入緩衝(insert buffer) 2)兩次寫(double write) 3)自適應雜湊索引(adaptive hash index)
29、MySQL 可以針對不同的表設定不同的引擎。在 create table 語句中使用 engine=引擎名(比如InnoDB)來設定此表的儲存引擎。
如:create table student(
id int primary key auto_increment,
username varchar(120),
age int
) ENGINE=InnoDB
30、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 外掛支援全文索引,並且效果更好
31、一張自增表中有三條資料,刪除兩條資料之後重啟資料庫,再新增一條資料,此時這條資料的 ID 是幾?
如果這張表的引擎是 MyISAM,那麼 ID=4,如果是 InnoDB 那麼 ID=2(MySQL 8 之前的版本)
32、記憶體表,指的是使用 Memory 引擎的表,建表語法是 create table … engine=memory。這種表的資料都儲存在記憶體裡,系統重啟的時候會被清空,但是表結構還在。
33、臨時表,可以使用各種引擎型別。使用 InnoDB 引擎或 MyISAM 引擎的臨時表,寫資料的時候是寫到磁碟上的
相關文章
- MySQL 體系結構MySql
- MySQL 讀書筆記 (一) 體系結構MySql筆記
- MySQL入門--體系結構MySql
- MySQL體系結構概覽MySql
- 《MySQL 效能優化》之理解 MySQL 體系結構MySql優化
- MySQL體系結構與儲存引擎MySql儲存引擎
- MySQL InnoDB儲存引擎體系結構MySql儲存引擎
- 第一章 MySQL體系結構和儲存引擎MySql儲存引擎
- 一文搞懂MySQL體系架構!!MySql架構
- JMeter實戰(一) 體系結構JMeter
- MySQL體系架構MySql架構
- MySQL整體架構與記憶體結構MySql架構記憶體
- 【PG體系結構】PG體系結構簡單說明
- 【JVM體系結構】JVM
- BeanFactory體系結構Bean
- MongoDB 體系結構MongoDB
- Servlet 體系結構Servlet
- Spring Security系列之體系結構概述(一)Spring
- 3:Oracle體系結構(邏輯結構)Oracle
- 【Mysql技術內幕筆記--1】--Mysql體系結構和儲存引擎MySql筆記儲存引擎
- mysql系統學習1- mysql的大體結構及執行流程MySql
- HDFS的體系結構
- oracle體系結構(轉)Oracle
- PostgreSQL體系結構概述SQL
- 1、JVM體系結構JVM
- 指令集體系結構_計算機體系結構:指令程式碼計算機
- 軟體體系結構評估
- 作業系統體系結構作業系統
- mysql學習6:第三章MYSQL 體系結構與儲存引擎MySql儲存引擎
- Postgresql資料庫體系結構-程式和記憶體結構SQL資料庫記憶體
- 【Oracle體系結構】 Oracle19C 系統結構介紹Oracle
- 網路管理體系結構
- 0718_oracle 體系結構Oracle
- 磁碟知識體系結構
- 計算機體系結構計算機
- 第一章 JVM與Java體系結構JVMJava
- 第一章JVM與Java體系結構JVMJava
- 論軟體體系結構的演化