MySQL調優篇 | 邏輯架構解讀(1)

資料與人發表於2022-03-23

【前言】

經常有一些朋友向我諮詢,如何寫出高效的SQL,這不是三言兩語能說得清的,索性認真來寫一下,增刪查改方面的知識我不再贅述,如果有基礎薄弱的同學,可以好好的補一補再來看。

以MySQL為基礎,MySQL調優篇內容主要包含MySQL邏輯架構、索引知識、表關聯演算法、explain執行計劃解讀及SQL調優實戰等。

文章受眾主要為兩類人:

第一類人是工作中不可避免的會接觸到MySQL的人,比如說一些專案人員、開發人員、測試人員等。

第二類人是專職DBA。

其實不管是專職的還是非專職的,就我接觸到的情況而言,很多DBA平時維護MySQL看起來沒什麼問題,但其實沒有很好的理論支撐,知其然而不知其所以然,解釋一個簡單的問題就能問倒一大部分的人。

比如說:MySQL的邏輯架構,分析當前業務架構優缺點?SQL工作原理是什麼樣的?

而且很多公司招聘面試的時候,考驗的也是背後的原理居多,基本上沒有機試。面試官問一個問題,即便你會解決但就是說不出原理,那麼你肯定要不了高薪。

理論+實戰=高薪

文章能夠讓大家有所收穫、有所借鑑那是最好的。

【MySQL邏輯架構】

1、整體架構圖

 

 

MySQL的架構不同於其他資料庫,它的外掛式的儲存引擎架構可以在多種不同場景中應用併發揮良好作用。這種架構可以根據業務的需求和實際需要選擇合適的儲存引擎。

各層介紹:

1.1 連線層

最上層是客戶端,包含本地sock通訊和大多數基於客戶端/服務端工具實現的類似於tcp/ip的通訊。

1.2 服務層

 

 

1.3.引擎層

儲存引擎負責MySQL中資料的儲存和提取,伺服器透過API與儲存引擎進行通訊。不同的儲存引擎具有的功能不同,這樣我們可以根據自己的實際需要進行選取。

show engines:檢視所有的資料庫引擎

 

 

show variables like ‘%engine%’ 檢視預設的資料庫引擎

 

 


MyISAM和InnoDB對比

 

 


1.4.儲存層

資料儲存層,主要是將資料儲存在執行於裸裝置的檔案系統之上,並完成與儲存引擎的互動。

2、查詢流程

MySQL的查詢流程大致是:

客戶端透過協議與DB伺服器建連線,傳送查詢語句,先檢查查詢快取,如果命中,直接返回結果,否則進行語句解析。
語法解析器和預處理:首先MySQL透過關鍵字將SQL語句進行解析,並生成一顆對應的“解析樹”。解析器將使用語法規則驗證和解析查詢;前處理器則根據一些規則進一步檢查解析數是否合法。

查詢最佳化器當解析樹被認為是合法的了,並且由最佳化器將其轉化成執行計劃。一條查詢可以有很多種執行方式,最後都返回相同的結果。最佳化器的作用就是找到這其中最好的執行計劃。

流程圖:

 

 

3、SQL的執行順序
一般SQL語法:

 

 


SQL解析:

 

 


真正執行的順序:

 

 


4、SQL效能問題

常見的幾個點:

  • SQL邏輯複雜且糟糕
  • 無效的索引
  • 伺服器調優和各個引數的配置(緩衝,執行緒數等)

SQL邏輯複雜且糟糕,通常表現在嵌入很多子查詢,各種表關聯等。

無效的索引,通常表現為索引建立了但沒用上,索引分為單值索引和複合索引和唯一索引,所謂單值索引指的是一個索引有且只包含一個列,一個表中可以有多個單列索引。複合索引是指索引能夠同時覆蓋多個資料列;唯一索引是指索引列的值必須唯一,但可以為null。

伺服器調優一般部署MySQL階段就調整好了。

以上就是全部內容了,下一篇講索引相關的知識,希望對大家的學習或者工作具有一定的參考價值。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69997824/viewspace-2883448/,如需轉載,請註明出處,否則將追究法律責任。

相關文章