Aaron Li

MySQL: MySQL Basic

Table of Content

                            +-------------------------------------------------------+
        1. TCP connection   |                                                       |
        2. authentication   |       +---------------------------------+             |
                            |       | 1. connection / thread handling |             |
client  --------------------|-->    +---------------------------------+             |
                            |                      ↓                                |
                            |       +---------------------------------+             |
                            |       | 2. Parser ( translate )         |             |
                            |       +---------------------------------+             |
                            |                      ↓                                |
                            |       +--------------------------------------------+  |
                            |       | 3. Execute (prepare -> optimize -> execute)|  |
                            |       +--------------------------------------------+  |
                            |                      |                                |
                            +----------------------|--------------------------------+
                                          +-----------------+
                                          |  storage Engine |
                                          |(innerDB, MyIsAm)|
                                          +-----------------+
                                      

Connection

  1. TCP 3 次握手
  2. 身份認證
    • 成功後,連接器獲取權限,此用戶在這次連線都會是基於該權限
    • 連接中就算被更改權限,在本次連線中並不會影響

長短連線

  • 長連線優點
    • 減少建立連線與斷開連線的過程
  • 長連線缺點
    • 長連接數太多,mysql 佔用的內存會太多而被系統 kill 導致重啟 mysql
    • 解決方法:
      1. 定期斷開連接
      2. client 主動重置連接(版本5.7),釋放內存

解析 SQL (詞法分析,語法分析)

  • 詞法分析: 建立SQL 語法樹
  • 語法分析: 根據語法規則判斷SQL語法是否正確

執行 SQL (prepare, optimize, execute)

  • Prepare (預處理)
    • 檢查 table 和 col 是否存在
    • 將 ‘select *' 擴展為 table 的所有 column
  • Optimize (優化)
    • 基於執行成本決定執行方案(索引)
  • Execute (執行)
    • 根據執行計劃執行SQL 查詢語句,從存儲引擎讀取記錄,返回給客戶端