MySQL 學習筆記(1)-基礎架構

一、mysql數據庫架構總體上分爲2大部分:

  • 1.1、server層
    • server層主要包括連接器、分析器、優化器、執行器以及查詢緩存等等。涵蓋大部分核心功能,所有跨存儲引擎的功能都在這一層實現,比如存儲過程,視圖、觸發器等。
  • 1.2、存儲引擎層
    • 存儲數據,提供讀寫接口,mysql擁有插件式的存儲引擎,可以在創建表的時候指定存儲引擎,不同的存儲引擎提供不同的功能特性,常見有的InnoDB,MyISAM,Memory等。

 

二、server層

  • 2.1、連接器
    • 連接器負責建立連接、獲取權限、維持和管理連接,可見客戶端第一個就是和連接器打交道。
    • 連接器獲取的權限在整個連接期間不會發生變化,如果權限有變更,需要斷開重連才能生效。
    • 連接有長連接和短連接之分,建立連接是個開銷不小的動作,所以要儘量避免頻繁的建立連接,可以使用長連接,但是長連接也會導致佔用過多的資源得不到釋放,造成系統資源緊張,所以如果使用長連接,在進行一些佔用內存比較大的連接後要釋放下連接,也就是斷開重連。如果使用的是5.7版本,通過執行mysql_reset_connection可以不用斷開重連,就能將連接初始化,釋放資源。
  • 2.2、查詢緩存
    • 查詢緩存適合在那些數據不會頻繁發生變更的表上使用,這樣可以調過優化器、執行器部分的操作,在判斷某條sql執行有結果緩存存在且沒有失效的情況下,直接返回結果。
    • 5.7版本中,通過命令show variables like '%query_cache_type%';查看可以看到默認值爲off,也就是默認這個功能是關閉的。在8.0版本中,這個功能已經被刪除了。
  • 2.3、分析器
    • 分析器主要做兩件事,一個是語法分析,一個語義分析。
    • 語法分析主要包括詞法分析、語法分析,也就是分析語句從結構上是否正確。
    • 語義分析是在語法分析正確的基礎上,再判斷表是否存在、表中是否有指定的列,用戶是否有權限等等。
    • 舉個例子:如果一條語句類似 select * rfom tab_name;這個在語法分析階段就會報錯,如果一個表中沒有col這個列,但是有這麼一條語句,select col from tab_name;在語義分析階段就會報錯。包括用戶如果對錶tab_name沒有權限,也會報錯。
  • 2.4、優化器
    • 優化器是關係型數據庫中非常重要的一個組成部分,因爲數據庫80%的性能問題是由sql引起的。而優化器生成的執行計劃決定了sql的執行效率。
    • 因爲一條sql可以有很多種執行路徑都能得到邏輯正確且相同的結果,但是不同的計劃有着不同的執行效率,這個就需要優化器來決定譬如使用哪個索引,join中先訪問哪張表等等。
  • 2.5、執行器
    • 有了優化器生成的執行計劃,執行器只需要按照執行計劃,調用存儲引擎提供的各種接口,獲取滿足條件的數據並返回給客戶端。

三、總結

  • 連接器和客戶端打交道,負責驗證對方身份,傳話
  • 分析器主要弄懂客戶端要幹啥,弄懂客戶端說的話
  • 優化器在以上基礎上將任務分解,找到一個效率比較高的方法
  • 執行器根據優化器提供的圖紙幹活,幹活的過程主要和存儲引擎的各種接口打交道

 

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