MySQL筆記(查詢優化續1)

2021-08-25 13:49:34 字數 984 閱讀 7150

在mysql中,提供給優化器使用的統計資料是由儲存引擎提供,例如表或索引的頁面數量、鍵和行的長度等資訊。

由優化器產生的執行計畫是乙個樹形結構,用於指導執行引擎產生結果,其結構為乙個左深度樹.如:

join

join tbl4

join tbl3

tbl1 tbl2

mysql聯接優化器是優化器中最重要的部分,決定了多表查詢的最佳執行順序。mysql使用迴圈巢狀的方式來進行聯接操作,具體來說,就是總是嘗試對當前表的一行,去找到聯接表的匹配行,回溯,然後繼續下一行匹配。這樣,不同的聯接順序將產生不同的開銷。

當然,優化器有時不一定會得到更優的方案,可以使用straight_join引數強制按照查詢中表的聯接順序來執行查詢。

當有很多表進行聯接的時,組合方案將急速上公升,當表的數量超過optimizer_search_dpth時,mysql會採用一些快速的搜尋策略(具體需要分析源**),有的查詢不能被重新排序(如 left join),聯接優化器也會利用這些客觀情況,減小搜尋空間。

排序優化

mysql可以利用索引來加快排序,但當沒有索引時,則需要自己對結果進行排序

當待排序資料數量和排序快取大小相當,則在記憶體內利用快速排序進行排序;

否則,就在磁碟上對資料進行分塊,對每塊資料進行快速排序,然後進行合併

兩種檔案排序方法:

雙路排序——先讀取行和執行order by的列,進行排序後,再次掃瞄表,讀取對應行。

單路排序——直接讀取查詢需要的所有列,進行排序後輸出特定列。

在排序聯接的時候。若orderby的第乙個表,則先對該錶進行排序。然後處理聯接,否則,先將聯接結果儲存到臨時表中,然後對臨時表進行排序。

執行結果傳送

伺服器增量的產生和傳送結果,當處理完所有表,並產生一行輸出開始,就會把結果傳送到客戶端。如果查詢是可快取的,還會在伺服器端進行快取

mysql查詢優化(1)

參考 優化查詢語句時,主要考慮以下幾點 a and b and c or a and b and c and d a and b and c or a and b and c and d aand b c and a 5 b 5 and b c and a 5 b 5 and b 5 or b 6 ...

MySQL筆記(查詢優化)

查詢效能優化 基本原則 優化資料訪問 一些典型的錯誤包括 提取了超過需要的行 多表聯接時提取所有列或提取所有的列 select 可能會造成覆蓋索引這樣的優化手段失效 mysql中,最簡單的開銷指標包括 1.執行時間 2.檢查的行數 3.返回的行數 通過使用索引,在explain時可以減少處理的行數 ...

查詢優化(MySQL優化查詢)

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