1. 程式人生 > 其它 >MySQL-02-體系結構

MySQL-02-體系結構




MySQL體系結構

c/s模型介紹


連線MySQL

# TCP/IP方式(遠端、本地)
mysql -uroot -pAlnk123 -h 10.0.0.51 -P3306

# Socket方式(僅本地)
mysql -uroot -pAlnk123 -S /tmp/mysql.sock



MySQL例項介紹

例項=mysqld後臺守護程序 + Master Thread(主執行緒) + 幹活的Thread + 預分配的記憶體

公司=老闆+經理+員工+辦公室



MySQL程式執行原理

mysqld程式結構

一條SQL語句的執行過程

連線層

(1)提供連線協議:TCP/IP 、SOCKET
(2)提供驗證:使用者、密碼,IP,SOCKET
(3)提供專用連線執行緒:接收使用者SQL,返回結果

通過以下語句可以檢視到連線執行緒基本情況
mysql> show processlist;

SQL層

(1)接收上層傳送的SQL語句
(2)語法驗證模組:驗證語句語法,是否滿足SQL_MODE
(3)語義檢查:判斷SQL語句的型別
			DDL :資料定義語言
			DCL :資料控制語言
			DML :資料操作語言
			DQL: 資料查詢語言
			...
(4)許可權檢查:使用者對庫表有沒有許可權
(5)解析器:對語句執行前,進行預處理,生成解析樹(執行計劃),說白了就是生成多種執行方案.
(6)優化器:根據解析器得出的多種執行計劃,進行判斷,選擇最優的執行計劃
        	 代價模型:資源(CPU IO MEM)的耗損評估效能好壞
(7)執行器:根據最優執行計劃,執行SQL語句,產生執行結果
	  執行結果:在磁碟的xxxx位置上
(8)提供查詢快取(預設是沒開啟的),會使用redis 或者 tair替代查詢快取功能
(9)提供日誌記錄(日誌管理章節):binlog,預設是沒開啟的。

儲存引擎層

類似於Linux中的檔案系統

負責根據SQL層執行的結果,從磁碟上拿資料
將16進位制的磁碟資料,交由SQL結構化化成表
連線層的專用執行緒返回給使用者


邏輯結構

庫:
	庫名,庫屬性

表:
	表名
	屬性

列:
	列名(欄位),
	列屬性(資料型別,約束等)
	
資料行(記錄)


物理儲存結構

庫的物理儲存結構
	用檔案系統的目錄來儲存
	
	
表的物理儲存結構
	MyISAM(一種引擎)的表:
  -rw-r----- 1 mysql mysql   10816 Apr 18 11:37 user.frm
  -rw-r----- 1 mysql mysql     396 Apr 18 12:20  user.MYD
  -rw-r----- 1 mysql mysql    4096 Apr 18 14:48 user.MYI
  
  InnoDB(預設的儲存引擎)的表:
  -rw-r----- 1 mysql mysql    8636 Apr 18 11:37 time_zone.frm
  -rw-r----- 1 mysql mysql   98304 Apr 18 11:37 time_zone.ibd
	time_zone.frm:儲存列相關資訊
	time_zone.ibd:資料行+索引
	
	
表的段、區、頁(16k)
	頁:最小的儲存單元,預設16k
	區:64個連續的頁,共1M
	段:一個表就是一個段,包含一個或多個區