MySQL 查詢優化詳解

2021-09-18 06:06:39 字數 2004 閱讀 2961

mysql客戶端/服務端通訊,查詢快取,查詢優化處理,查詢執行引擎,返回客戶端

mysql 客戶端與服務端的通訊方式是 「 半雙工 」 ;半雙工:雙向通訊,同時只能接收或者傳送,無法同時操作

對於乙個mysql連線,或者說乙個執行緒,時刻都有乙個狀態來表示這個連線正在做什麼,檢視命令:show full processlist / show processlist

可通過kill (id)的方式進行連線的殺掉。

快取select操作的結果集和sql語句;新的select語句,先查詢快取,判斷是否在可用的記錄集中;

與快取的sql語句,是否完全一樣,區分大小寫

值的不同,影響快取的啟用:

限制查詢快取區最大能快取的查詢記錄集,預設設定為1m

show statue like 'qcache%'命令可以檢視快取情況

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

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

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

查詢的表是系統表

查詢語句不涉及到表

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

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

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

先進行排序,再用二分查詢的方式

select查詢的序列號,標識執行的順序

查詢的型別,主要是用於區分普通查詢、聯合查詢、子查詢等

查詢設計到的表,直接顯示表名或者表的別名

由id為m,n查詢union產生的結果;由id為n查詢產生的結果

訪問型別,sql查詢優化中乙個很重要的指標,結果值從好到壞依次是:

system > const > eq_ref > ref > range > index > all

查詢過程中有可能用到的索引

實際使用的索引,如果為null,則沒有使用索引

根據表統計資訊或者索引選用情況,大致估算出找到所需的記錄所需要讀取的行數

它指返回結果的行佔需要讀到的行(rows列的值)的百分比,filtered的值越大越好

using temporary

using index

using where

select tables optimized away

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

mysql查詢優化詳解

在編寫快速的查詢之前,需要清楚一點,真正重要的是響應時間,而且要知道在整個sql語句的執行過程中每個步驟都花費了多長時間,要知道哪些步驟是拖垮執行效率的關鍵步驟,想要做到這點,必須要知道查詢的生命週期,然後進行優化,不同的應用場景有不同的優化方式,不要一概而論,具體情況具體分析 如果乙個sql查詢比...

mysql查詢優化explain命令詳解

mysql查詢優化的方法有很多種,explain是工作當中用的比較多的一種檢查方式。explain翻譯即解釋,就是看mysql語句的查詢解釋計畫,從解釋計畫我們能很清楚的看到解釋的語句有沒有合理用到索引,掃瞄了多少行數,有沒有觸及全表掃瞄 用到臨時表等影響慢查詢的原因。使用很簡單,如 explain...

查詢優化(MySQL優化查詢)

關聯查詢太多join 設計缺陷或不得已的需求 資料庫伺服器調優及各個引數設定不適當 緩衝 執行緒數等 慢查詢日誌 找出執行速度慢的sql語句 慢查詢的開啟並捕獲 explain 慢sql分析 show profile查詢sql在mysql伺服器裡面的執行細節和生命週期情況 sql資料庫伺服器的引數調...