MySQL SQL性能分析 慢查询日志、explain使用

SQL执行频率

MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库的insert、update、delete、delect的访问频次:

-- session 是查看当前会话;
-- global 是查询全局数据; 
show global status like 'Com_______';
  • Com_delete:删除次数
  • Com_insert:插入次数
  • Com_select:查询次数
  • Com_update:更新次数

在这里插入图片描述

通过上述指令,可以查看到当前数据库是以查询为主,还是以增删改为主,从而为数据库优化提供参考依据。 如果以增删改为主,可以考虑不进行索引优化。 如果以查询为主,要考虑对数据库的索引进行优化。

慢查询日志

慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。

MySQL的慢查询日志默认不开启,可以查看系统变量 slow_query_log

-- 查看慢查询日志是否开启
show variables like 'slow_query_log';

如果要开启慢查询日志,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:

# 开启MySQL慢日志查询开关
slow_query_log=1
# 设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志
long_query_time=2

配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息 /var/lib/mysql/localhost-slow.log

例如:导入近1000w条数据。执行以下SQL:

select count(*) from tb_sku;

可以看到,耗时近90秒

在这里插入图片描述

profile

show profiles 能够在做SQL优化时了解时间都耗费到了哪里。

通过 have_profiling 参数,能够看到当前MySQL是否支持profile操作:

select @@have_profiling ;

查看profile是否开启:

select @@profiling;

通过set语句在session/global级别开启profiling:

set profiling = 1;

执行一些SQL语句,然后就会记录SQL的耗时明细了。

-- 查看每一条SQL的耗时基本情况
show profiles;
-- 查看指定query_id的SQL语句各个阶段的耗时情况
show profile for query [query_id];
-- 查看指定query_id的SQL语句CPU的使用情况
show profile cpu for query [query_id];

explain

explain或者desc命令获取 MySQL 如何执行select语句的信息,包括在select语句执行过程中表如何连接和连接的顺序。

-- 直接在select语句之前加上关键字 explain / desc
explain select 字段列表 from 表名 where 条件;
字段描述
idselect查询的序列号,表示查询中执行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表示索引中使用的字节数, 该值为索引字段最大可能长度,并非实际使用长度,在不损失精确性的前提下, 长度越短越好 。
rowsMySQL认为必须要执行查询的行数,在innodb引擎的表中,是一个估计值,可能并不总是准确的。
filtered表示返回结果的行数占需读取行数的百分比, filtered 的值越大越好。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

paddle实现手写数字识别模型继续解读

要点: 手写数字识别用简单的线性进行分类效果比较差,添加卷积层和池化层效果会相对较好。参考文档:百度官方文档 一 网络结构 前几节我们尝试使用与房价预测相同的简单神经网络解决手写数字识别问题,但是效果并不理想。原因是手…

7.1 基本运放电路(1)

集成运放的应用首先表现在它能构成各种运算电路上,并因此而得名。在运算电路中,以输入电压作为自变量,以输出电压作为函数;当输入电压变化时,输出电压将按一定的数学规律变化,即输出电压反映输入电压某种运…

Msray-Plus采集工具帮您轻松获取目标受众的数据,让您的市场营销更加便捷

市场营销是企业推广产品和服务的重要手段之一,是企业获取客户和提高销售业绩的关键环节。然而,传统的市场营销方式存在着很多弊端,如缺乏数据支持、信息不准确、效率低下等问题,这些问题直接影响了企业的市场营销效果。而随着互联…

【Redis学习】Redis集群

理论简介 定义 由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节东间共享数据的程序集。…

Python中的主函数

在Python代码中,我们常常看到主函数是以if __name__ __main__开头的,比如 它的原理是什么呢? 首先要知道,__name__是内置变量,用于表示当前模块的名字。在一个模块中运行以下语句,你会发现输出的是__main…

elasticsearch 核心概念

1.近实时(Near Real Time,NRT) elasticsearch 是一个近实时的搜索和分析平台,这意味着从索引文档到可搜索文档都会有一段微小的延迟(通常是1s以内)。这种延迟主要是因为 elasticsearch 需要进行数据刷新和索引更新。 …

基于目标级联法的微网群多主体分布式优化调度(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

餐饮店的运营需要考虑哪些方面

餐饮店的运营需要多方面的考虑和规划,以下是传递宝APP上一些常用的餐饮店运营方法: 1.定位:明确餐饮店的定位和目标客户群体,针对不同的客户需求,提供个性化的服务和产品,比如是附近的上班族,还…

Android:NDK

3.1 NDK 一、NDK的作用 (1)、NDK产生的背景   Android平台从诞生起,就已经支持C、C开发。众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三…

JVM 、JDK 、JRE都是什么意思?有什么区别?

摘自 JavaGuide (「Java学习面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!) JVM Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实…

看完这个你就牛了,自动化测试框架设计

一、引言 随着IT技术的快速发展,软件开发变得越来越快速和复杂化。在这种背景下,传统的手工测试方式已经无法满足测试需求,而自动化测试随之而生。 自动化测试可以提高测试效率和测试质量,减少重复性的测试工作,从而…

AI绘画与虚拟人生成实践(一):生成人像,AI绘画模型和工具的效果对比

本篇的目的是生成一个虚拟的女生形象。先进入正题说明人像怎么生成,本篇使用到的工具和工具的介绍放在文末。 先来一波Midjourney生成的美图提升下大家学习的欲望 以上四张图使用的是相同的Prompt,如下: a beautiful chinese girl, 18 years old, detailed and big eye…

WorkPlus企业IM即时通讯私有化部署,从源头把控安全

数字中国战略不断推进,国家集中力量大力推动数字产业创新发展,各大企业纷纷加快了数字化转型步伐,数据安全保护的意识也不断提升。即时通讯办公平台作为高效沟通、协同工作的重要工具,在企业数字化转型中有着不可或缺的作用。所以…

干货 | MOSFET开关:电源变换器基础知识及应用

MOSFET的工作原理 金属氧化物半导体场效应晶体管 (MOSFET) 是一种场效应晶体管 (FET) 电子器件。它可以充当压控电流源,并主要用作开关或用于放大电信号。MOSFET的控制是通过向栅极施加特定的电压来进行的。当MOSFET导通时,电流通过在 体区(称…

微信小程序引入 vant ui组件

1.初始化 在小程序根目录(app.js所在目录),打开cmd命令窗口 npm init -y参数 -y 表示对 npm 要求提供的信息,都自动按下回车键,表示接受默认值。 2.下载miniprogram依赖 通过 npm 安装: npm i vant/weapp -S --p…

初级算法-栈与队列

主要记录算法和数据结构学习笔记,新的一年更上一层楼! 初级算法-栈与队列一、栈实现队列二、队列实现栈三、有效的括号四、删除字符串中的所有相邻重复项五、逆波兰表达式求值六、滑动窗口最大值七、前K个高频元素栈先进后出,不提供走访功能…

Vue3 关于setup与自定义指令

setup语法糖 最大好处就是所有声明部分皆可直接使用&#xff0c;无需return出去 注意&#xff1a;部分功能还不完善&#xff0c;如&#xff1a;name、render还需要单独加入script标签按compositionAPI方式编写 // setup 下还可以附加<script> setup语法糖独有 &…

改善Instagram客户服务的6个技巧

Instagram仍然是全球前四大社交网络&#xff0c;按用户数量排名。它通过其创新的过滤器、内容创建工具、视频和卷轴选项继续增长并推动流量。这是一个平台&#xff0c;世界顶级名人和有影响力的人可以为全球用户提供有趣和令人印象深刻的内容。 但不仅仅是一个娱乐平台&#xf…

MySQL数据库,表的增删改查详细讲解

目录 1.CRUD 2.增加数据 2.1创建数据 2.2插入数据 2.2.1单行插入 2.2.2多行插入 3.查找数据 3.1全列查询 3.2指定列查询 3.3查询字段为表达式 3.3.1表达式不包含字段 3.3.2表达式包含一个字段 3.3.3表达式包含多个字段 3.4起别名 3.5distinct(去重) 3.6order …

epoll进阶

epoll除了提供select/poll那种IO事件的电平触发&#xff08;Level Triggered&#xff09;外&#xff0c;还提供了边沿触发&#xff08;Edge Triggered&#xff09;&#xff0c;这就使得用户空间程序有可能缓存IO状态&#xff0c;减少epoll_wait/epoll_pwait的调用&#xff0c;提…