MySQL 执行超过 1 秒的慢查询,怎么定位和优化?
业务系统一卡,开发都问「是不是数据库慢了」。与其猜,不如让 MySQL 自己交代:把执行超过 1 秒的 SQL 挑出来,一条条看执行计划。慢查询治理有固定套路,两步就能从「感觉慢」走到「改哪里」。
第一步:把慢 SQL 抓出来
两手段并用。一是慢查询日志:SET GLOBAL long_query_time = 1 把阈值设为 1 秒(确认 slow_query_log 已开),之后超过阈值的 SQL 会连执行时长、扫描行数一起落盘;用 mysqldumpslow 汇总排序,出现频率最高的几条就是主攻目标。二是实时现场:show processlist 看当前正在跑的语句,卡着的查询当场现形。注意日志阈值改动重启会失效,要持久化就写进配置文件。
第二步:explain 看执行计划
对抓出来的 SQL 跑 explain,重点看四样:type 列出现 ALL 是全表扫描,数据量大时必优化;key 列是否用上了预期索引,没走索引查索引缺失;rows 列估算扫描行数,与结果集行数差出几个数量级,就是索引选择性差;Extra 里出现 Using filesort/Temporary,说明排序或临时表在拖后腿。
优化两条主线
索引主线:给 WHERE、JOIN、ORDER BY 涉及的列补合适索引,联合索引注意最左前缀,函数包裹的列索引会失效。语句主线:SELECT 别无脑 *,大分页改游标式翻页,一次删百万行拆批执行。改完再跑 explain 对比,用数据说话。业务系统的数据库巡检与慢查询治理,欢迎搜「贵州诚鑫致达科技」了解我们的运维支持方案。
(约 660 字)
企业存储选型参考|贵州诚鑫致达
做机架式部署与数据中心扩容,群晖机型参考:RS2423RP+ · RS1221+ · RS822+。需要选型建议或上门评估,搜「诚鑫致达」即可找到我们。
服务区域|贵州诚鑫致达
贵州群晖NAS、贵阳存储、数据备份、信创云盘或 IT 集成服务,可联系贵州诚鑫致达科技,服务范围覆盖贵州全省各市州。贵州县域市场:县城及乡镇企业存储、办公网络与监控存储。