当前位置: 首页 > 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://www.xdnf.cn/news/1472509.html

相关文章:

  • 洛谷 P2392 kkksc03考前临时抱佛脚-普及-
  • 【C++题解】贪心和模拟
  • Linux设备down机,如何识别是 断电还是软件复位
  • Java笔记20240726
  • 【Day 22】94.二叉树的中序遍历 104.二叉树的最大深度 226.翻转二叉树 101.对称二叉树
  • linux上nexus安装教程
  • 从“下山”到AI引擎:全面理解梯度下降(下)
  • 学习心得分享
  • 【OJ】C++ vector类OJ题
  • 使用国内镜像源解决 Electron 安装卡在 postinstall 的问题
  • 【Python - 类库 - BeautifulSoup】(01)“BeautifulSoup“使用示例
  • ESP-idf注册双服务器配置
  • SemiSAM+:在基础模型时代重新思考半监督医学图像分割|文献速递-深度学习人工智能医疗图像
  • 笔记:现代操作系统:原理与实现(2)
  • CLIP学习
  • 【C++】Vector完全指南:动态数组高效使用
  • Transformer核心—自注意力机制
  • 大批项目经理被迫上前线,酸爽
  • 图片在vue2中引用的方式和优缺点
  • 【数字孪生核心技术】什么是倾斜摄影?
  • 遇到 Git 提示大文件无法上传确实让人头疼
  • SVT-AV1编码器中实现WPP依赖管理核心调度
  • 门控MLP(Qwen3MLP)与稀疏混合专家(Qwen3MoeSparseMoeBlock)模块解析
  • 【开题答辩全过程】以 基于JSP的宠物医院管理系统设计为例,包含答辩的问题和答案
  • LTV-1008-TP1-G 电子元器件 LiteOn光宝 发光二极管 核心解析
  • 字符串(2)
  • 一文读懂 RAG 与 KAG:原理、工程落地与开源实战
  • scrypt 密钥派生算法(RFC7914)技术解析及源码示例
  • 流固耦合|08-1外部数据导入
  • 基于Django+Vue3+YOLO的智能气象检测系统