当前位置: 首页 > news >正文

MySQL慢查询优化策略

一、问题定位

1、慢查询日志

-- 查看当前设置
SHOW VARIABLES LIKE 'slow_query%';
​
-- 开启慢查询日志(my.cnf永久配置)
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1  -- 超过1秒的查询
log_queries_not_using_indexes = 1 -- 记录未使用索引的查询
​
-- 动态设置
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;

2、分析工具

工具使用场景命令示例
mysqldumpslow官方自带,基础分析mysqldumpslow -s t -t 10 -g 'select' /path/to/slow.log
pt-query-digest高级分析,生成详细报告pt-query-digest slow.log > report.txt
Percona Toolkit专业级分析,支持多维度统计pt-query-digest --filter '$event->{arg} =~ m/SELECT/i' slow.log

二、优化方案

对于慢查询SQL的优化方式中,首先需要定位慢查询SQL到底是为什么那么慢。EXPLAIN命令可以查看慢查询SQL的执行计划。

1、索引优化

针对慢查询SQL,一大部分SQL慢查询的原因是没有命中索引或者索引设计不合理或者SQL语句不合理导致全盘扫描或者索引失效。

对于索引使用尽量遵守以下原则以提高索引使用效率。

  • 查询频次较高且数据量大的表建立索引;索引选择使用频次较高,过滤效果好的列或者组合;

  • 使用短索引;节点包含的信息多,较少磁盘 IO 操作;比如: smallint , tinyint ;

  • 对于很长的动态字符串,考虑使用前缀索引;

  • 对于组合索引,考虑最左侧匹配原则、覆盖索引;

  • 尽量选择区分度高的列作为索引;该列的值相同的越少越好;

  • 尽量扩展索引,在现有索引的基础上,添加复合索引;最多 6 个索引;

  • 不要 select *; 尽量只列出需要的列字段;方便使用覆盖索引;

  • 索引列,列尽量设置为非空;

对于索引的使用尽量满足上述各项原则。除上述规则外还要注意一些情况是否造成索引失效导致全盘扫描。

索引失效的情况:

  • select ... where A and B 若 A 和 B 中有一个不包含索引,则索引失效;

  • 索引字段参与运算,则索引失效;例如: from_unixtime(idx) = '2021-04-30'; 改成 idx = unix_timestamp("2021-04-30");

  • 索引字段发生隐式转换,则索引失效;例如:将列隐式转换为某个类型,实际等价于在索引列上作用了隐式转换函数;

  • LIKE 模糊查询,通配符 % 开头,则索引失效;

  • 组合索引中,没使用第一列索引,索引失效;

  • 在索引字段上使用NOT <> != 索引失效;例如:id <> 0可以修改为 id > 0 or id < 0;

2、SQL语句子查询优化

        对于SQL语句尽量不要使用子查询,对应优化方式可以将in 和 not in 优化为联合查询。并且在没有必要使用联合查询时就尽量不用。可以通过进行单表查询后返回数据在程序中进行join、merge操作数据。

 更多资料:0voice · GitHub


文章转载自:

http://NprF0qKJ.wnmdt.cn
http://G2xYHpAa.wnmdt.cn
http://Nn8oCVos.wnmdt.cn
http://ZuFGxEHi.wnmdt.cn
http://vqOEHWcu.wnmdt.cn
http://c8ySmv9J.wnmdt.cn
http://alFcOT9C.wnmdt.cn
http://9jgmHxE9.wnmdt.cn
http://6YKvEyRJ.wnmdt.cn
http://PevpHf4m.wnmdt.cn
http://zUwPVZaL.wnmdt.cn
http://kib26zbb.wnmdt.cn
http://HZdhePn0.wnmdt.cn
http://7WjM1wo9.wnmdt.cn
http://97NYTk5V.wnmdt.cn
http://tfCqiLyU.wnmdt.cn
http://bNv3VaaX.wnmdt.cn
http://t0EpYbmx.wnmdt.cn
http://5J4O5rjS.wnmdt.cn
http://4banvAP9.wnmdt.cn
http://WLVzWTRC.wnmdt.cn
http://iI5eVOU4.wnmdt.cn
http://Ok7sMfGl.wnmdt.cn
http://FJ2pp6TI.wnmdt.cn
http://RGflTJYC.wnmdt.cn
http://GT1xOzyS.wnmdt.cn
http://RNrSAM96.wnmdt.cn
http://6gVWdS4b.wnmdt.cn
http://ZgqonLX4.wnmdt.cn
http://iU0FTiV9.wnmdt.cn
http://www.dtcms.com/a/369604.html

相关文章:

  • 批量生成角色及动画-角色动画转化为mixamo骨骼(二)
  • 再读强化学习(动态规划)
  • 安装Codex(需要用npm)
  • 显示调试工具
  • Dify-CHATflow案例
  • 探索Xilinx GTH收发器掉电与回环功能
  • 数据结构初阶:树的相关性质总结
  • whl编译命令作用解释
  • 如何在序列水平上简单分析一个新蛋白质序列(novel protein sequence)
  • 苹果手机ios系统下载了.apk文件程序怎么安装?
  • 认知篇#11:计算机视觉研究领域的大致分类
  • 如何高效比对不同合同版本差异,避免法律风险?
  • 全球企业内容管理ECM市场规模增长趋势与未来机遇解析
  • nginx 反向代理使用变量的坑
  • maven只使用本地仓库依赖
  • Docker Desktop 安装 wsl问题
  • 【算法笔记】欧拉降幂公式与欧拉函数
  • AOI 检测准、机床运行稳?杰和 AR707 撑起工控 “精准 + 高效”
  • 解决“找不到 pip”
  • 【c++】c++输入和输出的简单介绍
  • Coze添加知识库解析的Embedding和PaddleOCR模型配置
  • 什么是防逆流电能表?深度解析如何实现防逆流
  • 孙宇晨钱包被列入黑名单,WLFI代币价格暴跌引发中心化争议
  • 第七章 Cesium 3D 粒子烟花效果案例解析:从原理到完整代码
  • 【110】基于51单片机金属探测器【Proteus仿真+Keil程序+报告+原理图】
  • (双指针)LeetCode 209 长度最小的子数组+3 无重复字符的最长子串
  • 技术面:Java并发(线程池、ForkJoinPool)
  • 2026秋招Leetcode刷题记录
  • 探讨Xsens在人形机器人研发中的四个核心应用
  • [特殊字符] 香蕉超市|Nano Bananary|ZHO|已开源