1. 程式人生 > >MySQL慢優化個人記錄

MySQL慢優化個人記錄

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

1.子查詢

1.1背景

用mysql儲存了一些不太更新的資料,切資料量不大,所以用到了一些join及子查詢
但是在開發階段也發現慢sql,但表資料量不足5k。

select name
from t
where id in
(
	select id
	from t
	where age>10
)

sql的結構跟上類似,外層查詢id用了in,子查詢出來的資料都是可控的,不超過50條
使用EXPLAIN進行分析
在這裡插入圖片描述
發現了DEPENDENT SUBQUERY這個關鍵字,及外層查詢id in操作怎麼檢索了這麼多條資料!

1.2原因

http://itindex.net/detail/46772-優化-mysql-dependent
網上一搜DEPENDENT SUBQUERY就很容易找到關於子查詢優化的文章,上面一篇挺好的!
原因是你以為sql會先 進行子查詢,然後將子查詢的介面 in一下就出來。但並不是

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

1.3如何優化

可以使用臨時表進行join

select name
from t t1,(
	select id
	from t
	where age>10
) t2
where t1.id=t2.id

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