如何優(yōu)化SQL語句,看這篇就夠了 !
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
1.分析MySQL服務(wù)器當(dāng)前的狀態(tài)信息
SHOW SESSION STATUS;
SHOW SESSION STATUS LIKE 'Com_%' //當(dāng)前會話下所有語句類型的執(zhí)行次數(shù)

//可以了解當(dāng)前應(yīng)用是以插入更新為主,還是以查詢操作為主,以及各種SQL類型的執(zhí)行比例大概是多少
SHOW SESSION STATUS LIKE 'InnoDB_rows%' 
2.定位執(zhí)行效率比較低的SQL語句
(1) 慢查詢?nèi)罩?/h5>
查看當(dāng)前慢查詢?nèi)罩竟δ苁欠耖_啟
SHOW VARIABLES LIKE '%slow_query_log%'
SHOW VARIABLES LIKE '%slow_query_time%' //默認(rèn)為10秒
測試慢查詢?nèi)罩竟δ?/p>select SLEEP(11),first_name FROM actor where actor_id = 1; //語句會睡眠11秒
在日志文件中可以看到上面這個(gè)慢SQL

這樣我們就可以通過慢查詢?nèi)罩救グ堰@些值時(shí)間超過我們預(yù)期值的語句挑出來
可以在mysql的配置文件中配置慢查詢選項(xiàng),這樣既可永久生效。


(2) 查看執(zhí)行中的任務(wù)
SHOW PROCESSLIST
這種方式可以顯示當(dāng)前執(zhí)行中的SQL語句
select SLEEP(100),first_name FROM actor where actor_id = 1; //睡眠100秒
3.通過Desc或者Explain命令查看計(jì)劃執(zhí)行
通過慢查詢?nèi)罩局蝎@取到慢的SQL中,通過語句查看執(zhí)行計(jì)劃
兩條語句的執(zhí)行結(jié)構(gòu)是一樣的
DESC SELECT * FROM film_actor WHERE film_id = 1;
EXPLAIN SELECT * FROM film_actor WHERE film_id = 1;
| KEY | 含義 |
|---|---|
| type | 表的掃描類型 |
| possible_keys | 可能用到的索引 |
| key | 實(shí)際用到的索引 |
| key_leng | 索引的長度 |
| rows | 得到結(jié)果所需要的查詢的行數(shù) |
最后確定問題并采取相應(yīng)的優(yōu)化措施#
作者 | antaia11
來源 | cnblogs.com/antaia11/p/15178153.html

評論
圖片
表情
