MySQL 學習筆記一【總體結構】

============================================

MySQL學習筆記【第一部分】

============================================

一. MySQL架構圖

在這裏插入圖片描述

  • Client Connectors 接入方 支持協議很多
  • Management Serveices & Utilities 系統管理和控制工具,mysqldump、 mysql複製集羣、分區管理等
  • Connection Pool 連接池:管理緩衝用戶連接、用戶名、密碼、權限校驗、線程處理等需要緩存的需求
  • SQL Interface SQL接口:接受用戶的SQL命令,並且返回用戶需要查詢的結果
  • Parser 解析器,SQL命令傳遞到解析器的時候會被解析器驗證和解析。解析器是由Lex和YACC實現的
  • Optimizer 查詢優化器,SQL語句在查詢之前會使用查詢優化器對查詢進行優化
  • Cache和Buffer(高速緩存區) 查詢緩存,如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據
  • pluggable storage Engines 插件式存儲引擎。存儲引擎是MySql中具體的與文件打交道的子系統
  • file system 文件系統,數據、日誌(redo,undo)、索引、錯誤日誌、查詢記錄、慢查詢等

以下部分只針對上圖中的常用引擎進行介紹

首先要明白,存儲引擎負責對錶中的數據的進行讀取和寫入,常用的存儲引擎有InnoDB、MyISAM、Memory等,不同的存儲引擎有自己的特性,數據在不同存儲引擎中存放的格式也是不同的,比如Memory都不用磁盤來存儲數據。在介紹常用引擎前,希望讀者能明白計算機局部性原理,我將針對局部性原理做簡要概述。現在我將介紹InnoDB、MyISAM、Memory、CSV、Archive。

0. 計算機局部原理

首先要明白局部性原理能解決的是什麼問題,也就是主存容量遠遠比緩存大,CPU執行程序的時候需要使用內存塊,如果該內存塊在緩存上,那麼處理器直接從緩存上取該內存塊就行了,因爲緩存的數據傳輸的速率比內存快的多。因爲主存容量大,所以要取的內存塊很可能不在緩存上,因此就要把這個內存塊移到緩存上。局部性原理就是解決這個問題:
舉個例子:空間局部性,我們就可以選擇在讀取內存塊的時候將該內存塊附近的內存塊也讀進緩存中。稱爲預取(prefetch)

局部性原理是指CPU訪問存儲器時,無論是存取指令還是存取數據,所訪問的存儲單元都趨於聚集在一個較小的連續區域中。
三種不同類型的局部性:

  • 時間局部性(Temporal Locality):如果一個信息項正在被訪問,那麼在近期它很可能還會被再次訪問。
    程序循環、堆棧等是產生時間局部性的原因。
  • 空間局部性(Spatial Locality):在最近的將來將用到的信息很可能與現在正在使用的信息在空間地址上是臨近的。
  • 順序局部性(Order Locality):在典型程序中,除轉移類指令外,大部分指令是順序進行的。順序執行和非順序執行的比例大致是5:1。此外,對大型數組訪問也是順序的。

指令的順序執行、數組的連續存放等是產生順序局部性的原因。

1. InnoDB

在InnoDB中,數據會存儲到磁盤上,在真正處理數據時需要先將數據加載到內存,表中讀取某些記錄時,
InnoDB存儲引擎不需要一條一條的把記錄從磁盤上讀出來,InnoDB採取的方式是:將數據劃分爲若干個頁,以
頁作爲磁盤和內存之間交互的基本單位,InnoDB中頁的大小一般爲 16 KB,也就是說,當需要從磁盤中讀數據時
每一次最少將從磁盤中讀取16KB的內容到內存中,每一次最少也會把內存中的16KB內容寫到磁盤中。
頁是InnoDB管理存儲空間的基本單位,一個頁的大小默認是16KB。

SHOW GLOBAL STATUS like 'Innodb_page_size';
InnoDB頁結構

在這裏插入圖片描述
在這裏插入圖片描述InnoDB行格式
一行記錄可以以不同的格式存在InnoDB中,行格式分別是Compact、Redundant、Dynamic和Compressed行格
式。
我們可以在創建或修改表的語句中指定行格式:

CREATE TABLE 表名(列信息) ROW_FORMAR=行格式名稱
ALTER TABLE 表名 ROW_FORMAR=行格式名稱

在這裏插入圖片描述
記錄頭信息
在這裏插入圖片描述記錄的真實數據
在這裏插入圖片描述Dynamic和Compressed行格式
這兩種格式類似於Compact行格式,只不過在處理行溢出時有點分歧,它們不會在記錄的真實數據處存儲一部分數據,而是把所有的數據都存儲在其他頁面中,只在記錄的真實數據處存儲其他頁面的地址,另外,Compressed行格式會採用壓縮算法對頁面進行壓縮

2. MyISAM

Mysql5.5版本之前的默認存儲引擎 較多的系統表也還是使用這個存儲引擎 系統臨時表也會用到Myisam存儲引擎
特點:

  • select count(*) from table 無需進行數據的掃描
  • 數據(MYD)和索引(MYI)分開存儲
  • 表級鎖
  • 不支持事務
3. Memory

數據都是存儲在內存中,IO效率要比其他引擎高很多 服務重啓數據丟失,內存數據表默認只有16M
特點:

  • 支持hash索引,B tree索引,默認hash(查找複雜度0(1))
  • 字段長度都是固定長度varchar(32)=char(32)
  • 不支持大數據存儲類型字段如 blog,text
  • 表級鎖

應用場景:

  • 等值查找熱度較高數據
  • 查詢結果內存中的計算,大多數都是採用這種存儲引擎 作爲臨時表存儲需計算的數據
4. CSN

數據存儲以CSV文件
特點:

  • 不能定義沒有索引、列定義必須爲NOT NULL、不能設置自增列【不適用大表或者數據的在線處理】
  • CSV數據的存儲用,隔開,可直接編輯CSV文件進行數據的編排 【數據安全性低】、

應用場景:

  • 數據的快速導出導入
  • 表格直接轉換成CSV
5. Archive

壓縮協議進行數據的存儲,數據存儲爲ARZ文件格式
特點:

  • 只支持insert和select兩種操作
  • 只允許自增ID列建立索引
  • 行級鎖
  • 不支持事務
  • 數據佔用磁盤少

應用場景:

  • 日誌系統
  • 大量的設備數據採集
各存儲引擎對比:

在這裏插入圖片描述
:本文只是對於MySQL體系結構的總結,若想深入學習可參考官網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章