一條SQL語句的執行過程
1.1 連接層
- 提供連接協議: TCP/IP, SOCKET
- 提供驗證: 用戶 密碼 IP SOCKET
- 提供專用連接線程: 接收用戶SQL,返回結果
通過以下語句可以查看鏈接線程的基本情況:
mysql> show processlist;
1.2 SQL層(重點)
- 接收上層傳送的SQL語句
- 語法驗證模塊:驗證語句語法
- 語義檢查:判斷SQL語句的類型
DDL: 數據定義語言
DCL: 數據控制語言
DML: 數據操作語言
DQL: 數據查詢語言
- 權限檢查: 用戶對庫表有沒有權限
- 解析器: 對語句執行前,進行預處理,生產解析樹(執行計劃)
- 優化器: 根據解析器得出多種執行計劃,進行判斷,選擇最優的執行計劃,代價模型:(CPU, IO, MEM)資源的損耗性能好壞.
- 執行器: 根據最優執行計劃, 執行SQL語句,產生執行結果,執行結果:在磁盤的xxx位置上.
- 提供查詢緩存(默認是沒有開啓的),會使用redis tair替代查詢緩存功能
- 提供日誌記錄(日誌管理章節): binlog 默認是沒有開啓的
1.3 存儲引擎層(類似於Linux中的文件系統)
負責根據SQL層執行的結果, 從磁盤上那數據,將16進制的磁盤數據,交由SQL結構化成表,由連接層的專用線程返回給用戶.