Mysql中的sql是如何執行的 --- 極客時間學習筆記

MySQL中的SQL是如何執行的

MySQL是典型的C/S架構,也就是Client/Server架構,服務器端程序使用的mysqld.總體的MySQL流程以下圖所示:mysql

MySQL是有三層組成:sql

  1. 鏈接層: 負責客戶端與服務器端創建鏈接,客戶端發送SQL至服務端;
  2. SQL層: 對SQL語句進行查詢處理;
  3. 存儲引擎層: 與數據庫文件打交道,負責數據的存儲和讀取.

其中,SQL層與數據庫文件的存儲方式無關,咱們來看下SQL層的架構:數據庫

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

SQL語句在MySQL中的流程是: SQL語句 -> 緩存查詢 -> 解析器 -> 優化器 -> 執行器.緩存

說說存儲引擎,MySQL的存儲引擎採用了插件的方式,每一個存儲引擎都面向一種特定的數據庫應用環境.同事MySQL還容許開發人員設置本身的存儲引擎.下面列舉常見的存儲引擎:服務器

  1. InnoDB存儲引擎: 是MySQL5.5.8版本以後默認的存儲引擎,最大的特色是支持事務、行級鎖定、外鍵約束等.
  2. MyISAM存儲引擎: 在MySQL5.5.8版本以前是默認的存儲引擎,不支持事務,也不支持外鍵,最大的特色是速度快,佔用資源少.
  3. Memory存儲引擎: 使用系統內存做爲存儲介質,以便獲得更快的響應速度.不過若是mysqld進程崩潰,則會致使全部的數據丟失,所以只有當數據是臨時數據的狀況下才會使用Memory引擎.
  4. NDB存儲引擎: 也叫作NDB Cluster存儲引擎,主要用於MySQL cluster分佈式集羣環境,相似於Oracle的RAC集羣.
  5. Archive存儲引擎: 有很好的壓縮機制,用於文件歸檔,在請求寫入時會進行壓縮,因此常常用來作倉庫.

注意,數據庫的設計在於表的設計,因此MySQL中每一個表的設計均可以採用不一樣的存儲引擎,能夠根據實際狀況的數據處理須要來選擇存儲引擎,這個是MySQL強大的地方.架構

數據庫管理系統也是一種軟件

完成的MySQL結構圖以下:
oracle

profiling的使用,開啓profiling可讓MySQL收集在SQL執行時所使用的資源狀況,命令以下分佈式

select @@profiliong;

返回結果若是是0表示關閉,若是是1表示打開.可使用 set profiling = 1;將profiling打開.優化

接下來能夠執行sql語句,而後使用 show profiles來查詢當前會話產生的全部peofiles.
插件

前面會有query_id,可使用show profile;獲取上次查詢執行的時間,或者使用show profile for query id;查詢指定的query id執行的時間.

固然還有oracle的執行過程,這個暫時不研究.

相關文章
相關標籤/搜索