【MySQL】索引性能分析工具详解——>为sql优化(select)做准备

news2024/9/23 21:28:27

前言

大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

  • YY的《C++》专栏
  • YY的《C++11》专栏
  • YY的《Linux》专栏
  • YY的《数据结构》专栏
  • YY的《C语言基础》专栏
  • YY的《单片机》专栏
  • YY的《STM32》专栏
  • YY的《数据库》专栏

    目录

    • 一.索引性能分析工具——>为sql优化(select)做准备
      • 1.查看SQL执行频次
        • 【1】为什么要关注执行频率
        • 【2】查看SQL执行频次语法&演示
      • 2.慢查询日志
        • 【1】慢查询日志机理机理&作用&语法
        • 【2】演示:查看慢查询日志开关是否开启
        • 【2】演示:Linux中配置慢查询日志
        • 【3】演示:实时监测慢查询日志
      • 3.profiles详情——(解决慢查询日志--自定义问题)
        • 【1】慢查询日志机理机理&作用&语法
        • 【2】演示:打开profiles开关前后对比
        • 【3】演示:执行一系列的业务SQL的操作,然后通过profile查看指令的执行耗时/各个阶段耗时/CPU使用情况:
      • 4.explain执行计划(最常用)
        • 【1】explain执行计划&语法
        • 【2】explain执行计划演示
        • 【3】explain执行计划各个字段的含义

一.索引性能分析工具——>为sql优化(select)做准备

1.查看SQL执行频次

【1】为什么要关注执行频率

  • 有张表数据量大,但是只插入不查询,所以没必要优化;
  • 通过查看增删改/查占数据库操作的比例, 来判断是否需要优化

【2】查看SQL执行频次语法&演示

MySQL客户端连接成功后,通过show [sessionlglobal] status命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次:

SHOW GLOBAL STATUS LIKE 'Com_______‘; --模糊匹配,7个_代表7个字符

我们要关注增删查改操作

2.慢查询日志

【1】慢查询日志机理机理&作用&语法

  • 慢查询日志记录了所有执行时间超过 指定参数 (longquerytime,单位:秒, 默认10秒 )的所有SOL语句的日志——————> 要自定义参数可看下文【3.profile详情】
  • 慢查询日志的作用:一段操作后,我们可以在其中定位到效率比较低的sql,从而进行优化
  • MySQL的 慢查询日志默认没有开启 需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:
  • 配置完毕之后,通过以下指令重新启动MSQL服务器进行测试,查看慢日志文件中记录的信息/var/lib/mysql/localhost-slow.log。
    在这里插入图片描述

【2】演示:查看慢查询日志开关是否开启

show variables like 'slow query log';

在这里插入图片描述

【2】演示:Linux中配置慢查询日志

  • 登录linux,编辑mysql下的配置文件:/etc/my.cnf
    在这里插入图片描述
  • 大G跳到最后在这里插入图片描述
  • 输入在这里插入图片描述
slow_query_log=1
long_query_time=2

在这里插入图片描述

  • 重新连接后;再次查询,发现接口已开启
    在这里插入图片描述

【3】演示:实时监测慢查询日志

  • 我们开启两个窗口,第一个窗口输入如下代码查看慢查询日志实时情况
tail -f localhost-slow.1og

在这里插入图片描述

  • 第二个窗口执行一条select语句,由于用时没有超过10s,所以在第一个窗口中没有显示
    在这里插入图片描述
  • 第二个窗口执行一条典型性能低select语句,用时超过10s,所以在第一个窗口中显示

在这里插入图片描述
在这里插入图片描述

3.profiles详情——(解决慢查询日志–自定义问题)

【1】慢查询日志机理机理&作用&语法

  • 慢查询日志只记录超过10s的sql记录,想要自定义要通过profiles
  • show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里去了
  • 通过have profiling参数,能够看到当前MySQL 是否支持 profile操作:
SELECT @@have_profiling ;
  • 默认profiling是关闭的 ,可以通过set语句在session/global级别开启profiling
  • 通过以下语句,能够看到当前profile操作 是否开启
SET profiling=1;
  • 查看profiling状态
select @profiling;
  • 执行一系列的业务SQL的操作,然后通过如下指令查看指令的执行耗时:

在这里插入图片描述

【2】演示:打开profiles开关前后对比

在这里插入图片描述

【3】演示:执行一系列的业务SQL的操作,然后通过profile查看指令的执行耗时/各个阶段耗时/CPU使用情况:

在这里插入图片描述

  • 执行一系列sql语句
    在这里插入图片描述
  • 查询profiles
    在这里插入图片描述
  • 我们想知道最后一条语句,为何花了9s多,耗费在哪些地方,我们可以接着操作
    在这里插入图片描述
    在这里插入图片描述
  • 加上cpu,可以查看指定query id的SQL语句CPU的使用情况
    在这里插入图片描述

4.explain执行计划(最常用)

【1】explain执行计划&语法

EXPLAIN 或者 DESC命令获取 MySQL如何执行 SELECT语句的信息,包括在 SELECT语句执行过程中表如何连接和连接的顺序。
在这里插入图片描述

【2】explain执行计划演示

  • 在select语句前加入explain或desc即可

在这里插入图片描述

【3】explain执行计划各个字段的含义

  • ID:select查询的序列号,表示查询中执行select子句或者是操作表的顺序(id相同,执行顺序从上到下; id不同,值越大,越先执行 )
  • select_type:表示 SELECT的类型,常见的取值有 SIMPLE(简单表,即不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION 中的第二个或者后面的查询语句)、SUBQUERY(SELECT/WHERE之后包含了子查询)等
  • type:表示连接类型,性能由好到差的连接类型为NULL、system、const、eq_ref、ref、range、index、all
  • possible_key:显示可能应用在这张表上的索引,一个或多个
  • Key:实际使用的索引,如果为NULL,则没有使用索引。
  • Key_len:表示索引中使用的字节数,该值为索引字段最大可能长度,并非实际使用长度,在不损失精确性的前提下,长度越短越好
  • rows:MySQL认为必须要执行查询的行数,在innodb引擎的表中,是一个估计值,可能并不总是准确的
  • filtered:表示返回结果的行数占需读取行数的百分比,filtered 的值越大越好。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2093827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机械学习—零基础学习日志(概率论总笔记1)

概率论的起源 在历史上有明确记载的最早研究随机性的数学家是帕斯卡和费马。帕斯卡就是最早发明机械计算机的那位数学家,他并不是赌徒,但是他有些赌徒朋友,那些人常常玩一种掷骰子游戏,游戏规则是由玩家连续掷4次骰子&#xff0c…

Java | Leetcode Java题解之第378题有序矩阵中第K小的元素

题目&#xff1a; 题解&#xff1a; class Solution {public int kthSmallest(int[][] matrix, int k) {int n matrix.length;int left matrix[0][0];int right matrix[n - 1][n - 1];while (left < right) {int mid left ((right - left) >> 1);if (check(matr…

Python酷库之旅-第三方库Pandas(113)

目录 一、用法精讲 496、pandas.DataFrame.kurtosis方法 496-1、语法 496-2、参数 496-3、功能 496-4、返回值 496-5、说明 496-6、用法 496-6-1、数据准备 496-6-2、代码示例 496-6-3、结果输出 497、pandas.DataFrame.max方法 497-1、语法 497-2、参数 497-3、…

如何从 SD 卡恢复已删除的文件:分步指南

在 SD 卡上查找已删除的文件可能是一项相当艰巨的任务&#xff0c;尤其是当您认为它们已经消失得无影无踪时。然而&#xff0c;希望还是有的&#xff01;现代技术提供了多种有效的方法来恢复这些文件&#xff0c;无论是照片、文档还是其他类型的数据。使用正确的工具和一点耐心…

【初出江湖】大白话解释集中式、分布式、微服务的区别?

目录标题 什么是集中式&#xff1f;什么是分布式&#xff1f;分布式系统的架构一般构成模块分布式的优点分布式的缺点什么是分布式集群&#xff1f; 什么是微服务&#xff1f;微服务和分布式系统有什么主要区别&#xff1f;微服务架构与分布式系统在开发过程中有何不同&#xf…

嵌入式:Arm v7-M指令集架构中的字节序(大小端)

相关阅读 嵌入式https://blog.csdn.net/weixin_45791458/category_12768532.html?spm1001.2014.3001.5482 本文来源于博主无意之中的一个发现&#xff0c;虽然之前就知道Cortex-M3默认为小端模式&#xff0c;但是偶然发现了一些出乎意料的情况。 首先来看看Arm v7-M指令集架构…

【MarkDown】表格的对齐方法

MarkDown中表格的对齐方法 说明格式化对齐举例 摘要&#xff1a; 1.本文介绍了MarkDown语法中&#xff0c;插入表格后&#xff0c;表格的对齐方法 2.在CSDN写博客时&#xff0c;要经常用的功能&#xff0c;务必掌握这个小技巧 说明 在Markdown中创建表格&#xff0c;基本结构由…

奇偶校验、crc循环冗余检验

数据链路层 链路 从一个结点到相邻结点的一段物理线路&#xff0c;而中间没有任何其他的交换点 数据链路 是指把实现通信协议的硬件和软件加到链路上 帧 在数据链路上传输的数据包&#xff0c;称之为帧 数据链路层是以帧为单位进行传输和处理数据的 数据链路层的三个重…

用Springboot(java程序)访问Salesforce RestAPI(通过JWT认证)

外部系统想访问Salesforce的数据,发Rest请求,必须需要Salesforce的AccessToken。那么为了得到这个AccessToken,Salesforce有几种方式可供选择。 一种就是用户名密码认证方式(之前的文章介绍过通过java代码访问Salesforce),一种就是JWT认证方式。当然还有其他方式,之后有…

利用Streamlit前端框架开发Stable Diffusion模型图像生成网页应用(下篇)

今天介绍亚马逊云科技推出的国际前沿人工智能模型平台Amazon Bedrock上的Stability Diffusion模型开发生成式AI图像生成应用&#xff01;本系列共有3篇&#xff0c;在上篇中我们学习了如何在亚马逊云科技控制台上体验该模型的每个特色功能&#xff0c;如文生图、图生图、图像修…

认知杂谈41

今天分享 有人说的一段争议性的话 I I 贫富根源在观念 I 你知道不&#xff1f;穷人穷啊&#xff0c;好多时候是因为他们自己还有家里好几代人呢&#xff0c;都陷在一种不对的想法里出不来&#xff0c;还觉得这样挺好&#xff0c;就一直这么过下去了。可富人的那些想法呢&am…

借老系统重构机会我写了个groovy规则引擎

公司老系统的重构计划早就有了&#xff0c;为了对Java硬编码的各种校验规则进行重构&#xff0c;特地参考了相关技术&#xff0c;最终选择了groovy进行了系统的学习&#xff0c;并编写了一个即插即用的轻量级规则引擎。 文章目录 项目背景技术选型groovy的性能groovy脚本执行线…

Scala之父Martin Odersky作序推荐的Scala速学版(第3版)出版

Scala 是一个很有吸引力的选择。 Scala 的语法简洁&#xff0c; 跟 Java 的“陈词滥调”比起来让人耳目一 新。它运行在 Java 虚拟机&#xff08;Java virtual machine &#xff0c;JVM&#xff09;上&#xff0c;提供对大量库和工具的访问。并 且&#xff0c;Scala 不仅仅瞄准…

设计模式之适配器模式:软件世界的桥梁建筑师

一、什么是适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff08;Structural Pattern&#xff09;&#xff0c;通过将类的接口转换为客户期望的另一个接口&#xff0c;适配器可以让不兼容的两个类一起协同工作。其核心思想是通过一个…

嵌入式全栈开发学习笔记---Linux系统编程(概述)

目录 入门级问题 为什么要学习Linux系统&#xff1f; 为什么Linux系统被嵌入式设备广泛应用&#xff1f; 系统调用 应用层是什么&#xff1f; 系统调用和库函数有什么区别&#xff1f; 为什么在应用层不能直接调用内核中的函数&#xff1f; 为什么有了系统调用就安全了…

Linux系统安装MySQL8.0

1.查看Linux发行版 2.安装前准备 2.1.检查是否安装 rpm -qa | grep mysql 2.2.如已安装mysql&#xff0c;则删除 rpm -e --nodeps 包名 2.3.再次检查安装包是否全部删除 rpm -qa | grep mysql 2.4.搜索mysql文件夹 find / -name mysql 2>/dev/null 2.5.若有mysql文件夹&a…

Golang | Leetcode Golang题解之第388题文件的最长绝对路径

题目&#xff1a; 题解&#xff1a; func lengthLongestPath(input string) (ans int) {n : len(input)level : make([]int, n1)for i : 0; i < n; {// 检测当前文件的深度depth : 1for ; i < n && input[i] \t; i {depth}// 统计当前文件名的长度length, isFi…

Cookie对象的缺陷与应对策略

Cookie对象的缺陷与应对策略 1. 安全性问题&#xff1a;Cookie是明文的2. 存储限制&#xff1a;浏览器对Cookie数量和大小有限制3. 性能影响&#xff1a;Cookie携带过多增加网络流量4. 数据类型限制&#xff1a;Cookie的value值只能是字符串 &#x1f496;The Begin&#x1f4…

82.给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。实现返回已排序的链表

删除排序链表中的重复元素 II 一、题目描述 82. 删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head = [1,2,3,3,4,4,5] 输出:[1,2,5] 示例 2: 输入:hea…

华为云征文|部署电影收藏管理器 Radarr

华为云征文&#xff5c;部署电影收藏管理器 Radarr 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 应用场景1.3 核心竞争力 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Radarr3.1 Radarr 介绍3.2 Docker 环境搭建3.3 Radarr 部署3.4 Ra…