罩鹃_啟與 SQL 優(yōu)化實戰(zhàn)(寶塔環(huán)境))
# MySQL慢查詢?nèi)罩鹃_啟與SQL優(yōu)化實戰(zhàn)寶塔環(huán)境網(wǎng)站訪問卡頓、接口響應(yīng)超時很多時候根源在數(shù)據(jù)庫慢SQL。寶塔環(huán)境下MySQL慢查詢是日常運維高頻排查項下面整理一套實操流程。## 一、開啟慢查詢?nèi)罩具M入寶塔數(shù)據(jù)庫配置找到my.cnf在[mysqld]段添加配置 ini slow_query_log1slow_query_log_file/www/server/mysql/log/slow.log long_query_time2log_queries_not_using_indexes0參數(shù)說明slow_query_log1開啟慢查詢long_query_time2執(zhí)行超過 2 秒的 SQL 記錄日志log_queries_not_using_indexes關(guān)閉則不記錄沒有走索引的 SQL避免日志爆炸修改完成后重啟 MySQL 服務(wù)生效。二、查看實時慢 SQL查看當(dāng)前正在執(zhí)行的 SQLshow processlist;如果看到大量 Sleep 或者 Query 狀態(tài)長時間停留就是數(shù)據(jù)庫阻塞了。分析慢日志自帶工具mysqldumpslow-st /www/server/mysql/log/slow.log-s t 代表按照執(zhí)行時間排序優(yōu)先看耗時最高的語句。三、用 EXPLAIN 分析 SQL 執(zhí)行計劃拿到慢 SQL 之后前面加上 EXPLAIN 查看執(zhí)行計劃EXPLAIN SELECT * FROMtestWHEREid1;重點看 type 字段ref、range 屬于正常ALL 代表全表掃描是最需要優(yōu)化的一般是缺少索引。key 字段顯示當(dāng)前 SQL 實際命中的索引。四、索引失效常見坑where 條件字段做函數(shù)運算隱式類型轉(zhuǎn)換字符串和數(shù)字對比使用 or 連接沒有同時加索引模糊查詢 % 放在前面無法走索引。五、簡單優(yōu)化思路給查詢條件字段建立合適索引不要 select *只查詢需要的字段大表分頁避免 limit 超大偏移頻繁查詢的數(shù)據(jù)放入 Redis 緩存減少數(shù)據(jù)庫壓力。小結(jié)數(shù)據(jù)庫慢排查順序show processlist 看實時阻塞開啟慢查詢?nèi)罩静东@慢 SQLexplain 分析執(zhí)行計劃補索引、改寫 SQL、增加緩存參考資料文檔記錄lxmrj.com