MySQL查詢優化

2021-08-20 11:16:07 字數 1337 閱讀 6116

應用where語句的條件

在索引中使用where條件來過濾不匹配的記錄,在儲存引擎年後過濾層完成

使用索引覆蓋掃瞄(extra中出現了using index)來返回記錄,直接從索引中過濾不需要的 記錄並返回命中結果,這是在mysql服務層完成的,但無須再回表查詢記錄。

從資料表中返回記錄,然後過濾不滿足條件的記錄(在extra出現using where)這是在服務層完成的 , mysql需要先從資料表讀出記錄然後過濾。

若查詢中需要掃瞄大量的資料只返回少數的行

使用索引覆蓋,把需要用到的列都放到索引中,這樣儲存引擎無需回表獲取對應行就可以返回結果了

改變庫表結果例如使用單獨彙總表

重寫這個複雜的查詢,讓mysql優化器 能夠以更優化的方式執行這個查詢

重構查詢方式

乙個複雜查詢or多個簡單查詢

切分查詢:分而治之

分解關聯查詢:對每個表進行一次單錶查詢,然後在應用程式中進行關聯

分解關聯查詢的優勢:1.讓快取的效率更高。 2.執行單個查詢可以減少鎖的競爭。 3. 在應用層進行關聯,可以更容易對資料庫進行拆分,更容易做到高效能和可擴充套件。4. 查詢本身效率可能會有提公升。5.減少冗餘記錄的查詢。6這樣相當於在應用中實現了雜湊關聯,而不是使用mysql的巢狀迴圈關聯。

查詢快取

mysql的優化型別

重新定義關聯表的順序

將外鏈結轉化成內連線

使用等價變換規則

優化count()min()max()

預估並轉化為常數表示式

覆蓋索引掃瞄

子查詢優化

提前終止查詢

等值傳播

列表in()的比較:mysql會將in()列表裡面的內容排序再利用二分查詢來確定列表的值是否滿足條件這是乙個logn的操作

mysql查詢過程

1.查快取,若快取中沒有轉2,否則返回結果

2.預處理,優化得到優化樹 生成執行計畫 轉3

3.查詢執行引擎,呼叫執行引擎的api執行查詢

4.返回查詢結果,如果結果可以被快取,就快取,結果集返回給客戶端是乙個增量、逐步返回的過程 結果集中每一行都會以乙個滿足mysql客戶端/伺服器通訊協議的風暴傳送,再通過tcp協議進行傳送,在tcp傳送中可能對mysql的封包進行快取然後批量進行傳輸

優化關聯查詢

確保on或者using子句中的列上有索引,在建立索引的時候就要考慮到關聯的順序。一般在關聯順序的第二個表的相應列上建立索引

確保group by 和order by的表示式只涉及到乙個表的列

當公升級mysql的時候需要注意:關聯語法,運算子優先順序等其他可能會發生變化的地方

查詢優化(MySQL優化查詢)

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

mysql統計查詢優化 Mysql查詢優化

效能涉及的層面很多,但是在操作層面,主要有表結構設計優化 索引優化和查詢優化 查詢的生命週期大致可以分為,從客戶端 到服務端 在伺服器上解析 生成執行計畫 執行 返回結果給客戶端 sql執行流程 具體優化技巧 1.消除外連線 2.消除子查詢 盡量用join代替子查詢,雖說mysql查詢優化器會進行優...

MySQL優化 查詢優化

在每乙個消耗大量時間的查詢中,都能看到一些不必要的額外操作 某些操作被額外地重複了很多次 某些操作執行得太慢等。優化查詢的目的就是減少和消除這些操作所花費的時間。查詢效能低下最基本的原因是訪問的資料太多。所以需要考慮是否向資料庫請求了不需要的資料 1 多表關聯時,或獲取單錶資料時,盡量避免不加思考地...