查詢效能優化 高效能mysql讀書筆記三

2021-06-14 11:37:40 字數 2080 閱讀 9438

1、是否存在查詢多餘資料的情況

簡單的開銷指標:

響應時間

掃瞄的行數

返回的行數

解決方案:

使用索引覆蓋掃瞄(需要的資料都來自索引)

該錶庫表結構

重構查詢方式

2、重構查詢方式

(1)切分查詢

比如使用limit、通過時間節點變化

(2)分解關聯查詢

把複雜查詢,拆分為幾個簡單查詢

3、查詢執行基礎

(1)一次查詢過程:

客戶端傳送一條查詢給伺服器

伺服器檢查查詢快取,如果命中,直接返回快取中結果

伺服器進行sql解析,預處理,由優化器來生成對應的執行計畫

mysql根據優化器的執行計畫,呼叫儲存引擎的api進行查詢

返回結果

(2)查詢優化處理

1)語法解析和預處理:對語法規則進行驗證和解析查詢,生成乙個對應的解析樹;預處理進一步檢測數的合法性

2)查詢優化器:驗證語句合法和預處理之後,將其轉換為執行計畫。mysql使用基於成本的優化器,嘗試**乙個查詢使用某種計畫的成本,然後選擇其中成本最小的一               個。但是優化器很多時候選擇的執行計畫也不是最優,可能需要自己的處理(比如force某個索引的使用)

3)mysql中關聯查詢的執行方式(笛卡爾積、需要利用臨時表)

先在乙個表中取出單條資料

然後迴圈到下乙個表中取出匹配的行

根據各個表中匹配的行,返回查詢中需要的資料

mysql的執行計畫:開始一直巢狀迴圈、回溯完成所有表的關聯。(左側深度優先的樹)

4)利用stright_join,指定執行表的順序

5)排序優化

4、mysql查詢優化器的侷限性

(1)關聯子查詢

比對下三種方式的執行計畫

前兩種沒有區別:

基於內聯的這個效率比較高,不用做

books_book

表的全表掃瞄

(2)最大值和最小值的優化

利用limit來代替min

查詢效能優化

explain

select

min(aid)

from

mobile_article_pv

where

articleid

>

3

explain

select

aid 

from

mobile_article_pv

where

articleid

>

3

limit

1

因為在索引結構上,是按照順序來進行儲存的,所以可以直接用limit來獲取

《高效能MySQL》之MySQL查詢效能優化

響應時間過長。如果把查詢看做是乙個任務,那麼它由一系列子任務組成,每個子任務都會消耗一定的時間。如果要優化查詢,實際上優化其子任務,要麼消除其中一些子任務,要麼減少子任務的執行次數,要麼讓子任務執行得更快。查詢的生命週期 客戶端 伺服器 伺服器上解析 生成執行計畫 執行 返回結果給客戶端。其中 執行...

高效能MySQL之查詢效能優化(四)

本文內容基於 高效能mysql 第三版,寧海元 周振興 彭立勛 翟衛祥等譯。高效能 庫表結構優化 索引優化 查詢優化。如果要優化查詢,實際上要優化其子任務,要麼消除其中一部分子任務,要麼減少子任務的執行次數,要麼讓子任務執行得更快。通常來說,查詢的生命週期大致可以按照順序來看 從客戶端,到伺服器,然...

高效能MySQL之查詢優化

查詢執行引擎 結果返回給客戶端 mysql查詢的一些優化建議 reference 查詢優化 索引優化 庫表結構優化需要齊頭並進,乙個不落。檢視慢查詢時間 show variables like long query time 預設10s 檢視慢查詢配置情況 show status like slow...