MySQL慢優化個人記錄

2021-08-31 18:49:18 字數 1077 閱讀 1537

該文章記錄個人工作或者學習中經歷的mysql優化,該文章不做定時更新

1.1背景

用mysql儲存了一些不太更新的資料,且資料量不大,所以用到了一些join及子查詢

但是在開發階段也發現慢sql,但表資料量不足5k。

in 接子查詢是非常容易引發慢sql的,調優也比較難定位,一般這種推薦寫成兩個sql,將子查詢的結果直接放在第二個sql的in裡面。

select name

from t

where id in

( select t.id

from a

where age>10

)

sql的結構跟上類似,外層查詢id用了in,子查詢出來的資料都是可控的,不超過50條

使用explain進行分析

發現了dependent subquery這個關鍵字,及外層查詢id in操作怎麼檢索了這麼多條資料(這是主鍵)!

1.2原因

優化-mysql-dependent

網上一搜dependent subquery就很容易找到關於子查詢優化的文章,上面一篇挺好的!

原因是你以為sql會先 進行子查詢,然後將子查詢的介面 in一下就出來。但並不是

文中鏈結提到的《高效能mysql》的觀點,總之用子查詢(一般使用子查詢外層條件是 in),會造成外層查詢的全量檢索,導致查詢速度變慢。

1.3如何優化

可以使用臨時表進行join

select name

from t t1,(

select t.id

from a

where age>10

) t2

where t1.id=t2.id

這樣檢索的資料量就比較正常了

2.1 in子查詢引發外表全量掃表

2.2 索引列字段不一樣,例如varchar型別的索引,我們查詢時使用的是int型別,也不會命中索引

Mysql優化 慢查詢

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

Mysql慢查詢優化

二 優化這些慢查詢 3.細節優化 一般的應用系統,讀寫比例在10 1左右,而且插入操作和一般的更新操作很少出現效能問題,遇到最多的,也是最容易出問題的,還是一些複雜的查詢操作 修改配置檔案 在 my.ini 增加幾行 slow query log on log slow queries 儲存路徑 l...

Mysql 慢查詢優化

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