Mysql慢查詢優化

2021-10-02 05:46:52 字數 1549 閱讀 1674

二、優化這些慢查詢

3.細節優化

一般的應用系統,讀寫比例在10:1左右,而且插入操作和一般的更新操作很少出現效能問題,遇到最多的,也是最容易出問題的,還是一些複雜的查詢操作

修改配置檔案  在 my.ini 增加幾行:  

slow_query_log=

on log-slow-queries = 儲存路徑

long_query_time =

2

explain語句會有如下字段:

id

id越大越先執行

id相同上面的先執行

type

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

一般來說,得保證查詢至少達到range級別。

possible_keys

可能用到的索引

key

實際用到的索引列

key_len

索引長度,越短越好

ref

顯示索引的那一列被使用了

rows

估計掃瞄的行數

extra

using filesort: 檔案排序,mysql會對資料使用乙個外部的索引排序,而不是按照表內的索引順序進行讀取

using temporary: 使用了用臨時表儲存中間結果,mysql在對查詢結果排序時使用臨時表。常見於排序order by和分組查詢group by

using index

using where

mysql索引的原理

b+樹:

1每個非葉子節點有n條資料和n+1個指標指向子節點

2資料間的值域就是子節點所有資料的值域

3葉子節點存放真實資料

4葉結點構成乙個有序鍊錶,可以按照關鍵碼排序的次序遍歷全部記錄

每一層相當於一次io操作,一次io大約9ms。一次i/o讀一頁 page,乙個磁碟塊

真實的情況是,3層的b+樹可以表示上百萬的資料,如果上百萬的資料查詢只需要三次io,效能提高將是巨大的,如果沒有索引,每個資料項都要發生一次io,那麼總共需要百萬次的io,顯然成本非常非常高。

磁碟塊的大小也就是乙個資料頁的大小,是固定的,如果資料項佔的空間越小,資料項的數量越多,樹的高度越低。

這就是為什麼每個資料項,即索引欄位要盡量的小,比如int佔4位元組,要比bigint8位元組少一半。

這也是為什麼b+樹要求把真實的資料放到葉子節點而不是內層節點,一旦放到內層節點,磁碟塊的資料項會大幅度下降,導致樹增高。當資料項等於1時將會退化成線性表。

索引的原則

注意點

Mysql優化 慢查詢

先查詢是否開啟 開啟慢查詢日誌 set global slow query log 1 檢視引數設定 show variables like long query time 這裡查詢的是查過多少時間才會記錄成慢查詢 預設10 秒以上的s ql語句記錄到日誌中 修改引數 set global long...

Mysql 慢查詢優化

mysql 慢查詢的相關引數 使用show variables來查詢,set global來設定 slow query log 是否開啟慢查詢日誌,1表示開啟,0表示關閉。slow query log file mysql資料庫慢查詢日誌儲存路徑。可以不設定該引數,系統則會預設給乙個預設的檔案hos...

mysql慢查詢優化

一 什麼是慢查詢 mysql的慢查詢,全名是慢查詢日誌,是mysql提供的一種日誌記錄,用來記錄在mysql中響應時間超過閥值的語句。具體環境中,執行時間超過long query time值的sql語句,則會被記錄到慢查詢日誌中。簡單的說就是執行很長時間的sql語句。二 怎麼優化 1 索引沒起作用的...