MySql資料庫優化篇 二 查詢流程與儲存引擎

2021-10-08 08:00:15 字數 1711 閱讀 8847

1. mysql 的查詢流程大致是:

1. mysql 客戶端通過協議與 mysql 伺服器建連線,傳送查詢語句,先檢查查詢快取,如果命中,直接返回結果,

否則進行語句解析,也就是說,在解析查詢之前,伺服器會先訪問查詢快取(query cache)——

它儲存 select 語句以及相應的查詢結果集。如果某個查詢結果已經位於快取中,

伺服器就不會再對查詢進行解析、優化、以及執行。它僅僅將快取中的結果返回給使用者即可,這將大大提高系統的效能。

2. 語法解析器和預處理:首先 mysql 通過關鍵字將 sql 語句進行解析,並生成一顆對應的「解析樹」。

mysql 解析器將使用 mysql 語法規則驗證和解析查詢;預處理器則根據一些 mysql 規則進一步檢查解析數是否合法。

3. 查詢優化器當解析樹被認為是合法的了,並且由優化器將其轉化成執行計畫。一條查詢可以有很多種執行方式,

最後都返回相同的結果。優化器的作用就是找到這其中最好的執行計畫

4. 然後,mysql 預設使用的 btree 索引,並且乙個大致方向是:無論怎麼折騰 sql,

至少在目前來說,mysql 最多只用到表中的乙個索引。

2. sql語句的執行順序圖:

真正執行的順序:

隨著 mysql 版本的更新換代,其優化器也在不斷的公升級,優化器會分析不同執行順序產生的效能消耗不同而動態調整執行順序。

上面右圖是經常出現的查詢順序。

3. sql語句執行魚骨圖:

1. mysql資料庫常用引擎:

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

show variables like '%storage_engine%' 檢視預設的資料庫引擎

mysql資料庫預設使用innodb和myisam引擎。

2. 顯示所有引擎與預設引擎圖:

3. innodb 和 myisam 的差別:

對比項					myisam										innodb

外來鍵 不支援 支援

事務 不支援 支援

行表鎖 表鎖,即使操作一條記錄也會鎖住整個表, 行鎖,操作時只鎖某一行,不對其它行有影響,適合高併發的操作

不適合高併發的操作。

快取 只快取索引,不快取真實資料。 不僅快取索引還要快取真實資料,對記憶體要求較高,

而且記憶體大小對效能有決定性的影響。

關注點 讀效能 併發寫、事務、資源

總結:mysql查詢過程一般都是從from開始,到limit結束。而且mysql的預設儲存引擎是innodb,其對高併發、事務、等是友好支援的。

mysql 資料庫查詢優化

合理選擇表字段型別型別 int型別優先於varchar型別 優先於text型別 varchar 變長字串 型別優先於char 不可變長 型別 表分割 對於頻繁使用的且資料量增長很快的表進行表的分割 水平分割 當一張表資料量非常大影響效率時,可將表中的資料按一定的演算法將其進行水平方向 行 的分割,如...

mysql 資料庫查詢優化

從上圖可以看出,計算機系統硬體效能從高到代依次為 cpu cache l1 l2 l3 記憶體 ssd硬碟 網路 硬碟 根據資料庫知識,我們可以列出每種硬體主要的工作內容 cpu及記憶體 快取資料訪問 比較 排序 事務檢測 sql解析 函式或邏輯運算 網路 結果資料傳輸 sql請求 遠端資料庫訪問 ...

mysql資料庫查詢優化

上兩周一直想辦法提高查詢速度,取得一點效果,解決了部分問題,記下來以便將來自己檢視。由於公司沒有專門的dba,我自己對mysql資料庫也不是很熟悉,而且這個j a開發的網路審計系統的管理系統,是經過了n多人幾年時間的修修改改,今天到我們手裡,要改成能支援大流量情況的版本,所以對我們這個只有幾個人的j...