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

MySQL5.7慢查询实践

总结

  1. 获取慢查询SQL
  • 已经执行完的SQL,检查慢查询日志,日志中有执行慢的SQL
  • 正在执行中的SQL,show proccesslist;,结果中有执行慢的SQL

慢查询日志关键参数

名称解释
Query_time查询消耗时间
Time慢查询发生时间
  1. 分析慢查询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 wherewhere总是false
Using temporary使用临时表,一般发生在order by无索引列时
Using join buffer (Block Nested Loop)在进行嵌套循环连接,内表大
Select tables optimized away该查询不需要访问实际的表,而是通过优化方式直接计算出结果
  1. 优化慢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 wherewhere总是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&#xff0c;检查慢查询日志&#xff0c;日志中有执行慢的SQL正在执行中的SQL&#xff0c;show proccesslist;&#xff0c;结果中有执行慢的SQL 慢查询日志关键参数 名称解释Query_time查询消耗时间Time慢查询发生时间 分析慢查询SQL e…...

MySQL数据库的增删改查(进阶)

目录 数据库约束 约束类型 NULL约束 UNIQUE&#xff1a;唯一约束 DEFAULT&#xff1a;默认值约束 PRIMARY KEY&#xff1a;主键约束 FOREIGN KEY&#xff1a;外键约束 表的设计 一对一关系 一对多关系 多对多关系 查询 聚合查询 聚合函数 GROUP BY子句 HAVING …...

韶音骨传导耳机好不好用,韶音的骨传导耳机怎么样

提到韶音骨传导耳机&#xff0c;相信很多人在第一时间会想到韶音OpenRun Pro这一款骨传导耳机&#xff0c;这是在去年韶音新发布的一款骨传导耳机&#xff0c;在佩戴舒适性面做了很多优化&#xff0c;采用了夹紧力道适度的柔韧钛合金材质后挂&#xff1b;发声单元包裹柔软硅胶材…...

Nginx从安装到使用,反向代理,负载均衡

什么是Nginx&#xff1f; 文章目录 什么是Nginx&#xff1f;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() 功能介绍 使用上述函数&#xff0c;进入临界中断&#xff0c;任务不会切换&#xff0c;且中断优先级处于con…...

1.创建项目(wpf视觉项目)

目录 前言本章环境创建项目启动项目可执行文件 前言 本项目主要开发为视觉应用&#xff0c;项目包含&#xff08;视觉编程halcon的应用&#xff0c;会引入handycontrol组件库&#xff0c;工具库Masuit.Tools.Net&#xff0c;数据库工具sqlSugar等应用&#xff09; 后续如果还有…...

使用element-ui导航,进入对应的三级页面菜单保持点击状态

1.注意事项 01.路由中使用了keepAlive属性&#xff0c;要用keepAlive&#xff1a;true&#xff0c;不能等于false&#xff0c;使用false页面会刷新 2.使用的方法 NavMenu 导航菜单 3.项目实例 <template><div class"policy-home"><div class"…...

golang字符串转64位整数

在Go语言中&#xff0c;可以使用strconv包中的ParseInt函数将字符串转换为64位整数。以下是一个示例代码&#xff1a; package main import ( "fmt" "strconv" ) func main() { str : "12345" num, err : strconv.ParseInt(str, 10, 64…...

创作纪念日-我的第1024天

机缘 不知不觉已经成为创作者的第1024天啦… … 刚开始接触博客的初衷就是为了记笔记&#x1f4d2;、记总结&#x1f4dd;&#xff0c;或许对于当时就等同于是为了找工作。坚持学习并持续输出博客一年后&#xff0c;这时我发现再写博客&#xff0c;不在是为了找一份工作&…...

【线上问题】很抱歉,如果没有 JavaScript 支持,将不能正常工作

目录 一、问题说明二、解决方式 一、问题说明 1.修改了nginx的配置 2.postman调用接口正常&#xff0c;浏览器访问接口200&#xff0c;但无数据 3.浏览器访问&#xff0c;nginx没有访问记录&#xff0c;接口请求到不了应用服务 4.原因不祥 二、解决方式 1.清理了浏览器缓存...

便捷、快速、稳定、高性能!以 GPU 实例演示 Alibaba Cloud Linux 3 对 AI 生态的支持 | 龙蜥技术

编者按&#xff1a;日前&#xff0c;Alibaba Cloud Linux 3 为使 AI 开发体验更高效&#xff0c;提供了一些优化升级&#xff0c;本文为“Alibaba Cloud Linux 3 AI 能力介绍”系列文章预告篇&#xff0c;以 GPU 实例为例&#xff0c;为大家演示 Alibaba Cloud Linux 3 对 AI 生…...

创新科技改变城市:智慧城市建设全景展望

在当今科技飞速发展的时代&#xff0c;智慧城市的概念已经成为城市发展的新趋势&#xff0c;为人们的生活带来了前所未有的便利和改变。智慧城市&#xff0c;顾名思义&#xff0c;是以先进的信息技术为基础&#xff0c;通过数字化、互联网化和智能化手段&#xff0c;实现城市基…...

Kotlin 环境下解决属性初始化问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

Java复习-20-接口(3)- 代理设计模式

代理设计模式(Proxy) 功能&#xff1a;可以帮助用户将所有的开发注意力只集中在核心业务功能的处理上。 代理模式(Proxy Pattern)是一种结构性模式。代理模式为一个对象提供了一个替身&#xff0c;以控制对这个对象的访问。即通过代理对象访问目标目标对象&#xff0c;可以在目…...

如何远程访问Linux MeterSphere一站式开源持续测试平台

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…...

LinuxUbuntu安装OpenWAF

Linux&Ubuntu安装OpenWAF 官方GitHub地址 介绍 OpenWAF&#xff08;Web Application Firewall&#xff09;是一个开源的Web应用防火墙&#xff0c;用于保护Web应用程序免受各种网络攻击。它通过与Web服务器集成&#xff0c;监控和过滤对Web应用程序的流量&#xff0c;识…...

LeetCode 剑指offer 09.用两个栈实现队列

LeetCode 剑指offer 09.用两个栈实现队列 题目描述 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回…...

第三方软件检测机构有哪些资质,2023年软件测评公司推荐

软件第三方测试报告 伴随着软件行业的蓬勃发展&#xff0c;软件测试也迎来了热潮&#xff0c;但是国内的软件测试行业存在着测试入行门槛低、测试投入少、测试人员专业性不足等问题&#xff0c;这些问题不但会阻碍软件测试行业的良性发展&#xff0c;而且难以保证软件产品的质…...

Unity的GPUSkinning进一步介绍

大家好&#xff0c;我是阿赵。   在几年前&#xff0c;我曾经写过一篇介绍GPUSkinning的文章&#xff0c;这么多年之后&#xff0c;还是看到不停有朋友在翻看这篇旧文章。今天上去GitHub看了一下&#xff0c;GPUSkinning这个开源的插件已经很久没有更新过了&#xff0c;还是停…...

Mysql redolog

一、redolog 是啥 数据库的ACID&#xff1a;A原子性&#xff0c;C一致性&#xff0c;I隔离性&#xff0c;D持久性&#xff1b; redolog&#xff1a;保证 持久性&#xff1b; redolog: 系统奔溃重启时需要按照上述内容所记录的步骤重新更新数据页&#xff0c;特点&#xff1a…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...