Mysql執行流程

2021-10-04 11:46:44 字數 1250 閱讀 4364

檢視快取情況

show

status

like 'qcache%』 //可檢視快取情況

查詢快取-不會快取的情況

(1) 當查詢語句中有一些不確定的資料時,則不會被快取。如包含函式now(),current_date()等類似的函式,或者使用者自定義的函式,儲存函式,使用者變數等都不會被快取

(2) 當查詢的結果大於query_cache_limit設定的值時,結果不會被快取

(3) 對於innodb引擎來說,當乙個語句在事務中修改了某個表,那麼在這個事務提交之前,所有與這個表相關的查詢都無法被快取。因此長時間執行事務, 會大大降低快取命中率

(4) 查詢的表是系統表

(5) 查詢語句不涉及到表 —> select 1;

查詢快取的缺點-為什麼mysql預設關閉了快取開啟??

(1) 在查詢之前必須先檢查是否命中快取,浪費計算資源

(2) 如果這個查詢可以被快取,那麼執行完成後,mysql發現查詢快取中沒有這個查詢,則會將結果存入查詢快取,這會帶來額外的系統消耗

(3) 針對表進行寫入或更新資料時,將對應表的所有快取都設定失效。

(4) 如果查詢快取很大或者碎片很多時,這個操作可能帶來很大的系統消耗

查詢快取-使用業務場景

以讀為主的業務,資料生成之後就不常改變的業務 —> 比如門戶類、新聞類、報表類、論壇類等

解析sql

通過lex詞法分析,yacc語法分析將sql語句解析成解析樹

預處理階段

根據mysql的語法的規則進一步檢查解析樹的合法性,如:檢查資料的表和列是否存在,解析名字和別名的設定。還會進行許可權的驗證

查詢優化器

優化器的主要作用就是找到最優的執行計畫

mysql的查詢優化器是基於成本計算的原則。他會嘗試各種執行計畫。資料抽樣的方式進行試驗(隨機的讀取乙個4k的資料塊進行分析)

呼叫外掛程式式的儲存引擎的原子api的功能進行執行計畫的執行

MySQL執行流程

最近也在面試,被問到了資料庫優化的一些問題 廢話不多說開始吧 了解mysql優化,那麼我們就先從mysql的執行流程開始說吧 客戶端訪問資料庫 查詢快取 有之則直接返回 解析 語法解析,生成解析樹,處理器,生成新解析樹 查詢優化器 執行計畫 查詢執行引擎 返回結果 下面我們開始講一下每乙個步驟吧 1...

Mysql執行流程

啟動1.1 客戶端通過命令啟動mysql 1.2 呼叫初始化模組,對系統環境變數 快取 儲存引擎進行初始化 連線2.1 通過網路互動,使用者傳送一條sql會傳遞到連線管理模組,然後 到連線進 執行緒模組 2.2 通過使用者模組校驗使用者是否有訪問資料庫許可權 2.3 檢驗通過後到執行緒連線池檢視是否...

mysql執行流程

mysql主要分為server層和儲存引擎層 server層 主要包括聯結器 查詢快取 分析器 優化器 執行器等,所有跨儲存引擎的功能都在這一層實現,比如儲存過程 觸發器 檢視,函式等,還有乙個通用的日誌模組 binglog日誌模組。儲存引擎 主要負責資料的儲存和讀取,採用可以替換的外掛程式式架構,...