MySQL5.7慢查询实践
总结
- 获取慢查询SQL
- 已经执行完的SQL,检查慢查询日志,日志中有执行慢的SQL
- 正在执行中的SQL,
show proccesslist;,结果中有执行慢的SQL
慢查询日志关键参数
| 名称 | 解释 |
|---|---|
| Query_time | 查询消耗时间 |
| Time | 慢查询发生时间 |
- 分析慢查询SQL
explain 慢SQL
explain关键参数
| 名称 | 解释 |
|---|---|
| key | 实际用到的索引列 |
| type | 索引类型 |
| extra | 额外信息 |
type部分值
| 名称 | 解释 |
|---|---|
| consts | 基于主键或唯一索引查询,最多返回一条数据,优化阶段可得到数据 |
| ref | 基于普通索引的等值查询,表间等值连接 |
| range | 利用索引范围查询 |
| index | 全索引扫描 |
| ALL | 全表操作 |
- 阿里java开发手册-泰山版,要求至少range
Extra部分值
| 名称 | 解释 |
|---|---|
| Using index | 使用覆盖索引,减少表扫描和回表 |
| Using index condition | 先条件过滤索引再查询数据 |
| Using filesort | 使用外部排序,非索引排序 |
| Using where | 使用where条件 |
| Impossible where | where总是false |
| Using temporary | 使用临时表,一般发生在order by无索引列时 |
| Using join buffer (Block Nested Loop) | 在进行嵌套循环连接,内表大 |
| Select tables optimized away | 该查询不需要访问实际的表,而是通过优化方式直接计算出结果 |
- 优化慢SQL
准备数据库
库
CREATE DATABASE IF NOT EXISTS test_slow DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;
use test_slow;
表
CREATE TABLE `person_info_large` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `code` VARCHAR (36),`name` VARCHAR (36),`title` VARCHAR (72),`location` VARCHAR (108),PRIMARY KEY `pk_id` (`id`),UNIQUE `uk_code` (`code`),KEY `idx_title_location`(`title`,`location`)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8
行(java生成sql文件》导入sql文件)
package com.xcrj.gen;import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;public class Main {public static void main(String[] args) {generate(300 * 10000);}private static String rand36Str() {long time = System.currentTimeMillis();int random = (int) (Math.random() * Integer.MAX_VALUE);UUID uuid = new UUID(time, random);//随机种子return uuid.toString();}private static String rand36Str(int num) {StringBuilder sb = new StringBuilder();UUID uuid;for (int i = 0; i < num; i++) {uuid = UUID.randomUUID();sb.append(uuid.toString());}return sb.toString();}private static void generate(int size) {String row = "INSERT INTO researcher(`code`,`name`,`title`,`location`) VALUE(%s);";
// System.out.println(String.format(sql,IdWorker.getId()));String path = "./test_slow_researcher.sql";File file = new File(path);if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}try (FileOutputStream fos = new FileOutputStream(path);BufferedOutputStream bos = new BufferedOutputStream(fos);) {for (int i = 0; i < size; i++) {StringBuilder sb = new StringBuilder();String code = rand36Str(1);String name = rand36Str(1);String title = rand36Str(2);String location = rand36Str(3);sb.append("'").append(code).append("'").append(",").append("'").append(name).append("'").append(",").append("'").append(title).append("'").append(",").append("'").append(location).append("'");bos.write(String.format(row, sb.toString()).getBytes());if (i < size - 1) {bos.write("\n".getBytes());}}} catch (IOException e) {e.printStackTrace();}}
}
开启慢查询日志
# 检查默认值
show variables like '%quer%';# 开启慢查询日志
set global slow_query_log=on;
# 设置慢查询阈值为1s
set global long_query_time=1;
# 查看慢查询日志路径
show global variables like 'slow_query_log_file'# 检查设置值,若发现未生效,关闭当前会话(关闭数据库)重新打开,再检查
show variables like '%quer%';

| 参数 | 含义 |
|---|---|
slow_query_log | 是否开启慢查询日志 |
slow_query_log_file | 慢查询日志路径 |
long_query_time | 慢查询阈值,默认10s |
慢查询测试1,已经执行完的慢查询
# 统计
SELECT count(*) FROM researcher;
# 无索引列
SELECT `name` FROM researcher ORDER BY `name` DESC;
# 有索引列
SELECT `code` FROM researcher ORDER BY `code` DESC;
# 查询慢查询日志文件地址 /var/lib/mysql/333a2bf4a87e-slow.log
show variables like '%quer%';
# 查看慢查询日志
more /var/lib/mysql/333a2bf4a87e-slow.log
# 分析SQL
explain SELECT count(*) FROM researcher;
explain SELECT `name` FROM researcher ORDER BY `name` DESC;
explain SELECT `code` FROM researcher ORDER BY `code` DESC;
SELECT count(*) FROM researcher;

- Query_time: 大于18s
SELECT nameFROM researcher ORDER BYname DESC;

- Query_time: 大于19s
SELECT codeFROM researcher ORDER BYcode DESC;

- Query_time: 大于16s
explain SELECT count(*) FROM researcher;

- key=
uk_code,可知count(*)会使用索引 - type=index
- extra=Using index
explain SELECT nameFROM researcher ORDER BYname DESC;

- key=NULL
- type=ALL
- extra=Using filesort
explain SELECT codeFROM researcher ORDER BYcode DESC;

- key=uk_code
- type=index
- extra=Using index
explain SELECT idFROM researcher ORDER BYid DESC;

- key=primary
- type=index
- extra=Using index
参数说明
慢查询日志部分参数
| 名称 | 解释 |
|---|---|
| Query_time | 查询消耗时间 |
| Time | 慢查询发生时间 |
explain部分值
| 名称 | 解释 |
|---|---|
| key | 实际用到的索引列 |
| type | 索引类型 |
| extra | 额外信息 |
| select_type | 查询方式 |
| possible_keys | 可能用到的索引列 |
type部分值
| 名称 | 解释 |
|---|---|
| consts | 基于主键或唯一索引查询,最多返回一条数据,优化阶段可得到数据 |
| ref | 基于普通索引的等值查询,表间等值连接 |
| range | 利用索引范围查询 |
| index | 全索引扫描 |
| ALL | 全表操作 |
- 阿里java开发手册-泰山版,要求至少range
Extra部分值
| 名称 | 解释 |
|---|---|
| Using index | 使用覆盖索引,减少表扫描和回表 |
| Using index condition | 先条件过滤索引再查询数据 |
| Using filesort | 使用外部排序,非索引排序 |
| Using where | 使用where条件 |
| Impossible where | where总是false |
| Using temporary | 使用临时表,一般发生在order by无索引列时 |
| Using join buffer (Block Nested Loop) | 在进行嵌套循环连接,内表大 |
| Select tables optimized away | 该查询不需要访问实际的表,而是通过优化方式直接计算出结果 |
select_type部分值
| 名称 | 解释 |
|---|---|
| Simple | 简单查询 |
| Primary | 关联查询或子查询的外层查询 |
| Unoin | 关联查询或子查询的后续查询 |
慢查询测试2,正在执行的慢查询
SELECT `name` FROM researcher ORDER BY `name` DESC;
show processlist;

- Time=34,已经执行了34s
恢复默认参数
# 检查默认值
show variables like '%quer%';
# 开启慢查询日志
set global slow_query_log=off;
# 设置慢查询阈值为1s
set global long_query_time=10;
# 检查设置值,若发现未生效,关闭当前会话(关闭数据库)重新打开,再检查
show variables like '%quer%';
# 重置表,包括自增ID
TRUNCATE TABLE researcher;
相关文章:
MySQL5.7慢查询实践
总结 获取慢查询SQL 已经执行完的SQL,检查慢查询日志,日志中有执行慢的SQL正在执行中的SQL,show proccesslist;,结果中有执行慢的SQL 慢查询日志关键参数 名称解释Query_time查询消耗时间Time慢查询发生时间 分析慢查询SQL e…...
MySQL数据库的增删改查(进阶)
目录 数据库约束 约束类型 NULL约束 UNIQUE:唯一约束 DEFAULT:默认值约束 PRIMARY KEY:主键约束 FOREIGN KEY:外键约束 表的设计 一对一关系 一对多关系 多对多关系 查询 聚合查询 聚合函数 GROUP BY子句 HAVING …...
韶音骨传导耳机好不好用,韶音的骨传导耳机怎么样
提到韶音骨传导耳机,相信很多人在第一时间会想到韶音OpenRun Pro这一款骨传导耳机,这是在去年韶音新发布的一款骨传导耳机,在佩戴舒适性面做了很多优化,采用了夹紧力道适度的柔韧钛合金材质后挂;发声单元包裹柔软硅胶材…...
Nginx从安装到使用,反向代理,负载均衡
什么是Nginx? 文章目录 什么是Nginx?1、Nginx概述1.1、Nginx介绍1.2、Nginx下载和安装1.3、Nginx目录结构 2、Nginx命令2.1、查看版本2.2、检查配置文件正确性2.3、启动和停止2.4、重新加载配置文件2.5、环境变量的配置 3、Nginx配置文件结构4、Nginx具体…...
freertos之资源管理
中断屏蔽 屏蔽中断函数 在任务中使用 taskENTER_CRITICA()/taskEXIT_CRITICAL() 在中断中使用 taskENTER_CRITICAL_FROM_ISR()/taskEXIT_CRITICAL_FROM_ISR() 功能介绍 使用上述函数,进入临界中断,任务不会切换,且中断优先级处于con…...
1.创建项目(wpf视觉项目)
目录 前言本章环境创建项目启动项目可执行文件 前言 本项目主要开发为视觉应用,项目包含(视觉编程halcon的应用,会引入handycontrol组件库,工具库Masuit.Tools.Net,数据库工具sqlSugar等应用) 后续如果还有…...
使用element-ui导航,进入对应的三级页面菜单保持点击状态
1.注意事项 01.路由中使用了keepAlive属性,要用keepAlive:true,不能等于false,使用false页面会刷新 2.使用的方法 NavMenu 导航菜单 3.项目实例 <template><div class"policy-home"><div class"…...
golang字符串转64位整数
在Go语言中,可以使用strconv包中的ParseInt函数将字符串转换为64位整数。以下是一个示例代码: package main import ( "fmt" "strconv" ) func main() { str : "12345" num, err : strconv.ParseInt(str, 10, 64…...
创作纪念日-我的第1024天
机缘 不知不觉已经成为创作者的第1024天啦… … 刚开始接触博客的初衷就是为了记笔记📒、记总结📝,或许对于当时就等同于是为了找工作。坚持学习并持续输出博客一年后,这时我发现再写博客,不在是为了找一份工作&…...
【线上问题】很抱歉,如果没有 JavaScript 支持,将不能正常工作
目录 一、问题说明二、解决方式 一、问题说明 1.修改了nginx的配置 2.postman调用接口正常,浏览器访问接口200,但无数据 3.浏览器访问,nginx没有访问记录,接口请求到不了应用服务 4.原因不祥 二、解决方式 1.清理了浏览器缓存...
便捷、快速、稳定、高性能!以 GPU 实例演示 Alibaba Cloud Linux 3 对 AI 生态的支持 | 龙蜥技术
编者按:日前,Alibaba Cloud Linux 3 为使 AI 开发体验更高效,提供了一些优化升级,本文为“Alibaba Cloud Linux 3 AI 能力介绍”系列文章预告篇,以 GPU 实例为例,为大家演示 Alibaba Cloud Linux 3 对 AI 生…...
创新科技改变城市:智慧城市建设全景展望
在当今科技飞速发展的时代,智慧城市的概念已经成为城市发展的新趋势,为人们的生活带来了前所未有的便利和改变。智慧城市,顾名思义,是以先进的信息技术为基础,通过数字化、互联网化和智能化手段,实现城市基…...
Kotlin 环境下解决属性初始化问题
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
Java复习-20-接口(3)- 代理设计模式
代理设计模式(Proxy) 功能:可以帮助用户将所有的开发注意力只集中在核心业务功能的处理上。 代理模式(Proxy Pattern)是一种结构性模式。代理模式为一个对象提供了一个替身,以控制对这个对象的访问。即通过代理对象访问目标目标对象,可以在目…...
如何远程访问Linux MeterSphere一站式开源持续测试平台
文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…...
LinuxUbuntu安装OpenWAF
Linux&Ubuntu安装OpenWAF 官方GitHub地址 介绍 OpenWAF(Web Application Firewall)是一个开源的Web应用防火墙,用于保护Web应用程序免受各种网络攻击。它通过与Web服务器集成,监控和过滤对Web应用程序的流量,识…...
LeetCode 剑指offer 09.用两个栈实现队列
LeetCode 剑指offer 09.用两个栈实现队列 题目描述 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回…...
第三方软件检测机构有哪些资质,2023年软件测评公司推荐
软件第三方测试报告 伴随着软件行业的蓬勃发展,软件测试也迎来了热潮,但是国内的软件测试行业存在着测试入行门槛低、测试投入少、测试人员专业性不足等问题,这些问题不但会阻碍软件测试行业的良性发展,而且难以保证软件产品的质…...
Unity的GPUSkinning进一步介绍
大家好,我是阿赵。 在几年前,我曾经写过一篇介绍GPUSkinning的文章,这么多年之后,还是看到不停有朋友在翻看这篇旧文章。今天上去GitHub看了一下,GPUSkinning这个开源的插件已经很久没有更新过了,还是停…...
Mysql redolog
一、redolog 是啥 数据库的ACID:A原子性,C一致性,I隔离性,D持久性; redolog:保证 持久性; redolog: 系统奔溃重启时需要按照上述内容所记录的步骤重新更新数据页,特点:…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
