一、问题定位

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.pswp.cn/pingmian/95501.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95501.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/95501.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 ASP.NET Core 创建基于角色的 Web API

在使用 ASP.NET Core 构建基于角色的 Web API 时&#xff0c;代码优先方法是一种强大而高效的方法。使用它&#xff0c;我们可以在代码中定义数据模型和关系&#xff0c;然后自动生成相应的数据库模式。这会带来什么&#xff1f;当然是更快的开发周期和更大的灵活性。为什么&am…

无字母数字命令执行

写在前面 说白了数字还是好构造的&#xff0c;bash的算数拓展&#xff01; base64命令 这玩意说白了有点鸡肋&#xff0c;因为你得知道flag的文件名和位置&#xff01; base64 flag.php这个会将flag.php里面的内容给base64编码输出来。那么如何用无字母数字构造呢&#xff1f; …

AAB包转apks转apk

1. 下载bundletool-all-1.17.2.jar&#xff08;不一定非得1.17.2&#xff0c;可以其他版本&#xff09; https://github.com/google/bundletool/releases/tag/1.17.2 2. 在aab、keystore、bundletool-all-1.17.2.jar的目录下&#xff0c;运行指令 java -jar bundletool-all-1…

从零开始:用uv构建并发布一个Python CLI应用,集成CI/CD自动化发布与Docker容器化部署

使用uv构建并发布一个完整的Python CLI应用 概述 初始化项目 编写应用代码 定义项目 (`pyproject.toml`) 使用`uv`安装依赖 本地运行和测试 依赖锁定 构建 发布 生产环境实践之CI/CD 创建工作流配置文件 配置GitHub Secrets 创建和推送tag 验证发布 生产环境实践之Docker 创建D…

如何在Qt中使用周立功USB转CAN卡

如何在 Qt 中使用周立功 USB 转 CAN 卡 文章目录如何在 Qt 中使用周立功 USB 转 CAN 卡一、简介二、准备工作三、使用四、运行效果五、写在最后​一、简介 最近在工程中用到了周立功的 USB 转 CAN 卡&#xff0c;需求是要通过上位机进行通信&#xff0c;因此有了这篇文章。 有…

JavaScript 源码剖析:从字节码到执行的奇妙旅程

JavaScript&#xff0c;这门风靡全球的脚本语言&#xff0c;以其灵活性和跨平台性征服了无数开发者。我们每天都在使用它&#xff0c;但它在后台是如何工作的&#xff1f;一段看似简单的JS代码&#xff0c;在执行之前究竟经历了哪些“变形记”&#xff1f;今天&#xff0c;让我…

FPGA—硬件电路一旦上电配置完成,各个功能模块会并行地持续工作

1.示例代码参考这段代码是用 Verilog 编写的一个 LED 闪烁控制模块&#xff0c;主要实现了 LED 按一定时间间隔循环移位闪烁的功能。下面详细解释其架构组成&#xff1a;模块定义与端口声明模块名为 led_flash&#xff0c;包含三个端口&#xff1a;sys_clk&#xff1a;输入端口…

从零到上线:Docker、Docker Compose 与 Runtime 安装部署全指南(含实战示例与应用场景)

文章目录一、Docker 安装1. Ubuntu / Debian&#xff08;官方仓库&#xff09;2. RHEL / CentOS / Rocky / AlmaLinux3. 验证4. macOS / Windows&#xff08;Docker Desktop&#xff09;二、Docker Compose&#xff08;V2&#xff09;安装与基本用法1) 验证2) 最小示例&#xf…

Java基础篇02:基本语法

1 注释 注释是写在程序中对代码进行解释说明的文字&#xff0c;方便自己和其他人查看&#xff0c;以便理解程序的。注释分为三种&#xff1a;单行注释、多行注释、文档注释注释不影响代码的执行&#xff1a; 原因是编译后的文件已经没有注释了// 这是单行注释&#xff1a;。通常…

【SECS/GEM 】SECS/GEM 日志管理相关的消息

明白 ✅ 在 SECS/GEM 架构里&#xff0c;设备日志&#xff08;Equipment Logging 主要涉及 事件日志&#xff08;Event Log&#xff09;、报警日志&#xff08;Alarm Log&#xff09;、配方操作日志&#xff08;Recipe Log&#xff09;、以及用户操作/命令日志。这些日志通过 S…

ragas 框架使用Chat-GLM模型报API 调用参数有误,请检查文档

ragas 框架使用Chat-GLM模型报API 调用参数有误&#xff0c;请检查文档解决方案 from ragas.llms import LangchainLLMWrapper # 点击LangchainLLMWrapper 进入这个类找到这个方法直接 return 0.1出现问题原因 ChatGLM 不支持设置temperature等于0&#xff0c;默认的值太小了

Kaggle - LLM Science Exam 大模型做科学选择题

Kaggle - LLM Science Exam Science Exam Simple Approach w/ Model Hub | Kaggle Platypus2-70B with Wikipedia RAG | Kaggle 5个选项只有一个选项正确&#xff0c;目标&#xff1a;回答一个选项序列&#xff08;只有前三个有效&#xff09; 输出正确选项 &#xff08;可…

贪吃蛇鱼小游戏抖音快手微信小程序看广告流量主开源

核心优势&#xff1a;为流量主运营者与新手量身打造 1. 为流量主运营者破解成本困局 本地化运行&#xff0c;零服务器成本&#xff1a;数据运行与存储全程在用户手机本地完成&#xff0c;无需部署服务器及后台系统&#xff0c;彻底摆脱服务器租赁、维护等硬性支出&#xff0c;…

PDF Reader 编辑阅读工具(Mac中文)

原文地址&#xff1a;PDF Reader 编辑阅读 for Mac v5.2.0 PDF Reader Pro Mac&#xff0c;是一款PDF编辑阅读&#xff0c;PDF Reader Pro让您直接在 Mac 上进行PDF文件阅读、笔记、编辑、转换、创建PDF、签署PDFs、填写PDF Forms表单、设置密码、合并拆分文件、水印等等&…

Django REST framework:SimpleRouter 使用指南

1. SimpleRouter 是什么&#xff1f; SimpleRouter 是 DRF&#xff08;Django REST framework&#xff09;提供的路由器&#xff0c;能根据 ViewSet 自动生成标准的 REST 路由&#xff0c;包括&#xff1a; GET /resources/ → 列表&#xff08;list&#xff09;POST /resource…

覆盖Transformer、GAN:掩码重建正在重塑时间序列领域!

随着大数据与深度学习的发展&#xff0c;时间序列分析的建模能力显著提升&#xff0c;而掩码重建作为一种自监督学习范式&#xff0c;已成为提升序列表征能力的重要技术。该方法通过随机掩码部分数据并重建原始序列&#xff0c;迫使模型挖掘时序依赖性与潜在模式&#xff0c;在…

用AI做TikTok影视解说,全流程全自动成片,不懂外语也能做全球矩阵!

多语种解说&#xff1a; 短剧出海狂吸美金 多语种解说抢先机 TikTok、YouTube等平台&#xff0c;尤其在非英语市场&#xff0c;内容供给仍远远不足&#xff0c;每一个小语种市场都是潜在蓝海。 有人用英语讲仙侠、西语讲爽剧、日语讲宫斗、阿语讲悬疑&#xff0c;一夜涨粉百…

解密大语言模型推理:输入处理背后的数学与工程实践

解密大语言模型推理&#xff1a;输入处理背后的数学与工程实践当你向ChatGPT提问时&#xff0c;短短几秒内就能获得流畅的回答&#xff0c;这背后隐藏着怎样的技术魔法&#xff1f;答案在于大语言模型高效推理过程中精妙的输入处理机制。在现代大语言模型推理中&#xff0c;输入…

02、连接服务器的几种方式

02、连接服务器的几种方式 1、Xshell 适用于Windows https://www.xshell.com/en/free-for-home-school/ 2、Termius 适用于MacOS 直接苹果商店下载即可 3、IDEA 连接 Tools - Deployment - Browse Remote Host 1、打开Browse Remote Host2、添加服务3、输入服务器连接信息并测试…

高并发系统设计方案(直播场景)

最近在准备面试&#xff0c;正把平时积累的笔记、项目中遇到的问题与解决方案、对核心原理的理解&#xff0c;以及高频业务场景的应对策略系统梳理一遍&#xff0c;既能加深记忆&#xff0c;也能让知识体系更扎实&#xff0c;供大家参考&#xff0c;欢迎讨论。 1. 微服务拆分 …