MySql基礎知識整理筆記(一)

前言

工做以來用Mysql的頻率很是高,愈來愈以爲本身MySql的基礎知識很是差,故重學一下Mysql,順便作下筆記和總結,文章所涉及內容及資料均來自極客時間《SQL必知必會》專欄,有興趣的同鞋可自行購買,小弟就不貼推廣連接了~sql

基礎概念定義

按照SQL語言能夠劃分4個部分:
一、DDL(Data Definition Language),用來定義數據庫對象,數據表和列。使用DDL建立,刪除,修改數據庫和表的結構;
二、DML(Database Manipulation Language),數據庫操做語言,操做數據庫的相關數據,好比增長,刪除,修改表中的數據;
三、DCL(Data Control Language),數據控制語言,用它來定義訪問權限和安全等級;
四、DQL(Data Query Language),數據查詢語言,用它來查詢數據;數據庫

Mysql架構

Mysql是Client/Server架構,體系架構圖以下:緩存

clipboard.png

由如下幾個部分組成:安全

  1. 鏈接池組建 (Connection Pool)
  2. 管理服務和工具組建 (Enterprise Management Services & Utilities)
  3. SQL接口組件(SQL Interface)
  4. 查詢分析器(Parser)
  5. 優化器組件(Optimizer)
  6. 緩衝組件(Cache & Buffer)
  7. 插件式存儲引擎(Pluggable Storage Engines)
  8. 物理文件 (File System , Files & Logs)

存儲引擎

  1. InnoDB 存儲引擎:Mysql 5.5版本後默認的存儲引擎,優勢是支持事務,行級鎖,外鍵約束,支持崩潰後的安全恢復;
  2. MyISAM 存儲引擎:不支持事務和外鍵,支持全文索引(但只對英文有效),特色是查詢速度快;
  3. Memory 存儲引擎:數據放在內存當中(相似memcache)以便獲得更快的響應速度,可是崩掉的話數據會丟失;
  4. NDB 存儲引擎:主要用於Mysql Cluster分佈式集羣;
  5. Archive 存儲引擎:有很好的壓縮機制,用於文件歸檔,寫入時會進行壓縮;

Sql語句的執行順序

SELECT DISTINCT player_id, player_name, count(*) as num # 順序 5
FROM player JOIN team ON player.team_id = team.team_id # 順序 1
WHERE height > 1.80 # 順序 2
GROUP BY player.team_id # 順序 3
HAVING num > 2 # 順序 4
ORDER BY num DESC # 順序 6
LIMIT 2 # 順序 7

完整的順序是:
一、FROM子句組裝數據(包括JOIN)
二、WHERE子句進行條件篩選
三、GROUP BY分組
四、使用匯集函數進行計算;
五、HAVING篩選分組;
六、計算全部的表達式;
七、SELECT 的字段;
八、ORDER BY排序
九、LIMIT篩選架構

Sql語句的執行流程

MySQL 中的流程是:SQL 語句→緩存查詢→解析器→優化器→執行器。
clipboard.png分佈式

  1. 查詢緩存:Server 若是在查詢緩存中發現了這條 SQL 語句,就會直接將結果返回給客戶端;若是沒有,就進入到解析器階段。須要說明的是,由於查詢緩存每每效率不高,因此在 MySQL8.0 以後就拋棄了這個功能。
  2. 解析器:在解析器中對 SQL 語句進行語法分析、語義分析。
  3. 優化器:在優化器中會肯定 SQL 語句的執行路徑,好比是根據全表檢索,仍是根據索引來檢索等。
  4. 執行器:在執行以前須要判斷該用戶是否具有權限,若是具有權限就執行 SQL 查詢並返回結果。在 MySQL8.0 如下的版本,若是設置了查詢緩存,這時會將查詢結果進行緩存。
相關文章
相關標籤/搜索