[MySQL] SQL优化之性能分析

🌈键盘敲烂,年薪30万🌈

目录

一、索引优化

1、索引是什么:

2、索引的数据结构:

3、索引种类:

4、sql分析(回表查询)

二、定位慢查询语句

1、慢查询日志

2、profile详情

3、explain执行计划(重点)

4、查看执行频次


 

一、索引优化

1、索引是什么:

通过一些约束,快速查询到相应字段的一种数据结构

索引在sql优化中占有非常重要的地位,因为索引与查询挂钩,查询是我们最常做的一个操作。

2、索引的数据结构:

Hash索引:查询快,但是不支持范围查询,只能精确定位某个数据。

B+树索引:查询较快,支持范围查询,这也是InnoDB存储引擎中默认的索引结构


B+树结构:

多路平衡树,每个节点存放key和指针,指针数量等于key数量+1

插播小知识:

B+树与B树,有什么区别,为什么不用二叉树???

B+树没个非叶子结点只存放指针,可以最大限度的降低树的高度,提高查询效率。

所有数据存放在叶子节点,查询稳定而二叉树层次会更深,也会有退化为链表的风险

3、索引种类:

聚簇索引:叶子节点中主键下面挂的是每一行的数据

二级索引:叶子节点中索引值下面挂的是主键id

4、sql分析(回表查询)

现有user表,id为主键,name有唯一约束和唯一索引结构,分析下面sql语句。

-- select * from user where id = 1;

-- select * from user where name = 'zhang';

分析:

①where 后面是id,从主键索引里面查找,找到了id为1的,再看前面select 后面是 * 主键下面包含了这些字段信息,直接返回。

②where 后面是name,并且有唯一索引结构,从该索引查找,找到了姓名为zhang的,同样select * 也是查询所有字段,但是此时name下面只有主键id的值,他要根据id再次查询主键索引,性能低

二、定位慢查询语句

1、慢查询日志

  • mysql带有慢查询日志,该日志会记录超过指定时间的sql语句,

注意:

慢查询日志默认为不开启,开启之后默认指定时间为10s。

可通过修改配置文件来设置这两参数。

  • 修改mysql的配置文件 

缺点:

有些sql在规定的时间之内,但是查询花了9.9秒,并且性能很低,慢查询日志无法记录这样的sql我们也就无法优化.

2、profile详情

  • show profiles 查看sql语句的执行时间

  • show profile for query query_id; 查看指定语句的执行时间

3、explain执行计划(重点)

  • explain执行计划:他记录了sql查询的一些详细信息

例如:查询部门和员工信息,

控制台返回这么一张表,我们重点关注这5个字段。

type:

  • 表示访问表的方式,是性能分析中重要的一个指标。常见的取值有:
    • ALL:全表扫描。
    • index:通过索引扫描。
    • range:通过索引范围扫描。
    • ref:非唯一性索引扫描。
    • eq_ref:唯一性索引扫描。
    • const:单表中最多有一个匹配行的情况。

反应查询效率 从高到底分别是NULL->system->const->eq_ref->ref->range->index->all

all性能最差,也就是它是全表扫描,没有使用索引,NULL 只有像select 'A' 这样的没有查表才会这样,所以开发中我们尽量优化到system 或者const或者ref级别。

possible_keys:

  • 可能使用的索引,但不一定用到

key:

  • 使用的索引

key_len:

  • 使用索引的长度(字节为单位)

Extra:

  • 包含有关查询的额外信息,可能包括:
    • Using index:表示查询使用了覆盖索引。
    • Using where:表示 MySQL 会在存储引擎层使用 WHERE 条件过滤行。
    • Using temporary:表示查询需要创建临时表。
    • Using filesort:表示 MySQL 会对结果使用文件排序。

4、查看执行频次

 

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

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

相关文章

数字化合纵连横:跨境电商的多维商业布局

跨境电商在数字化时代崛起,不再局限于传统的边界,而是通过数字化手段实现了合纵连横的多维商业布局。这种布局不仅推动了国际贸易的创新,也为企业在全球范围内发展提供了更为广阔的空间。本文将深入探讨跨境电商如何通过数字化手段实现合纵连…

Android:The emulator process for AVD Pixel_2_API_29 was killed

The emulator process for AVD Pixel_2_API_29 was killed 报错描述: 第一次安装Android studio好不容易解决gradle启动模拟器又出现了以下错误 The emulator process for AVD Pixel_2_API_29 was killed原因一: 需要安装Intel x86 Emulator Acceleer…

【C语言快速学习基础篇】之二控制语句、循环语句

文章目录 一、控制语句1.1、if...else...单条件语句1.2、if...else if...else...多条件语句1.3、switch...case 二、循环语句2.1、for循环2.2、while循环2.3、注意:for循环和while循环使用上面等同2.4、do while循环2.4.1、while条件成立时2.4.2、while条件不成立时…

2023年【广东省安全员C证第四批(专职安全生产管理人员)】考试题及广东省安全员C证第四批(专职安全生产管理人员)报名考试

题库来源:安全生产模拟考试一点通公众号小程序 广东省安全员C证第四批(专职安全生产管理人员)考试题参考答案及广东省安全员C证第四批(专职安全生产管理人员)考试试题解析是安全生产模拟考试一点通题库老师及广东省安…

别划走!3分钟看懂 Git 底层工作原理

这是一篇能让你迅速了解 Git 工作原理的文章,实战案例解析,相信我,3 分钟,绝对能够有收获! Git 目录结构 Git 的本质是一个文件系统(很重要,记住这句话,理解这句话)&am…

浅谈 USB Bulk 深入浅出 (1) - USB 传输模式 及 何谓 USB bulk

来源:大大通【阿福的随笔】浅谈 USB Bulk 深入浅出 (1) - USB 传输模式 及 何谓 USB bulk 1. USB 传输模式有哪些 USB 是即插即用使用差动信号的装置界面,是以 端点 ( Endpoint ),做为传输装置的输出入端,透过不同的端点 ( Endp…

工作中常用的RabbitMQ实践

目录 1.前置知识 准备工作 2.导入依赖 3.生产者 4.消费者 5.验证 验证Direct 验证Fanout 验证Topic 1.前置知识 rabbitmq有五种工作模式;按照有无交换机分为两大类 无交换机的:简单队列(一对一,单生产单消费)、工作队列(工作队列有轮训分发和公…

内网穿透的应用-如何结合Cpolar内网穿透工具实现在IDEA中远程访问家里或者公司的数据库

文章目录 1. 本地连接测试2. Windows安装Cpolar3. 配置Mysql公网地址4. IDEA远程连接Mysql小结 5. 固定连接公网地址6. 固定地址连接测试 IDEA作为Java开发最主力的工具,在开发过程中需要经常用到数据库,如Mysql数据库,但是在IDEA中只能连接本…

VS Code使用教程

链接远程服务器 https://blog.csdn.net/zhaxun/article/details/120568402 免密登陆服务器 1生成客户机(个人PC)密令 ssh-keygen -t rsa生成的文件在主目录的.ssh文件当中。 查看密令并复制到linux系统当中 cat id_rsa.pub 2复制到服务器中 echo …

用C语言了解文件那些下 ‘流‘ 事

本篇会加入个人的所谓‘鱼式疯言’❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言,而是理解过并总结出来通俗易懂的大白话,我会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的,可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 前言 &#…

AMEYA360:大唐恩智浦荣获 2023芯向亦庄 “汽车芯片50强”

2023年11月28日,由北京市科学技术委员会和北京市经济和信息化局指导、北京经济技术开发区管理委员会主办、盖世汽车协办的“芯向亦庄”汽车芯片大赛在北京亦庄成功闭幕。 在本次大赛中 大唐恩智浦的 电池管理芯片DNB1168 (应用于新能源汽车BMS系统) 凭卓越的性能及高…

PDF控件Spire.PDF for .NET【转换】演示:将 PDF 转换为 Excel

PDF是一种通用的文件格式,但它很难编辑。如果您想修改和计算PDF数据,将PDF转换为Excel将是一个理想的解决方案。在本文中,您将了解如何使用Spire.PDF for .NET在 C# 和 VB.NET 中将 PDF 转换为 Excel。 Spire.Doc 是一款专门对 Word 文档进行…

医疗设备智慧管理助力医院提质增效,阿基米德amp;健康界实践分享

近日,苏州阿基米德网络科技有限公司与医疗领域头部级媒体健康界,联合举办“数智为擎 提质增效——医学装备智慧管理创新发展论坛”的直播活动。 直播现场,来自上海交通大学医学院附属同仁医院、中华医学会航海医学分会、苏州阿基米德的专家们…

vscode报错:建立连接:XHR failed

文章目录 问题解决方案 问题 Windows端ssh远程连接Linux端,Windows端vscode报错:“…XHR failed.” 解决方案 参考:解决 Windows 端 VS Code “无法与 “…“ 建立连接:XHR failed.” 问题 亲测有效。 总结: linux…

如何在小米路由器4A千兆版刷入OpenWRT并通过内网穿透工具实现公网远程访问

文章目录 前言1. 安装Python和需要的库2. 使用 OpenWRTInvasion 破解路由器3. 备份当前分区并刷入新的Breed4. 安装cpolar内网穿透4.1 注册账号4.2 下载cpolar客户端4.3 登录cpolar web ui管理界面4.4 创建公网地址 5. 固定公网地址访问 前言 OpenWRT是一个高度模块化、高度自…

代码随想录二刷 |二叉树 |144.二叉树的前序遍历

代码随想录二刷 |二叉树 |144.二叉树的前序遍历 题目描述解题思路代码实现递归法迭代法 题目描述 144.二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输…

使用Sourcetrail解析C项目

阅读源码的工具很多,今天给大家推荐一款别具一格的源码阅读神器。 它就是 Sourcetrail,一个免费开源、跨平台的可视化源码探索项目 使用

Python+Appium自动化测试之元素等待方法与重新封装元素定位方法

在appium自动化测试脚本运行的过程中,因为网络不稳定、测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待的方法来避免这种…

前端知识(十三)——JavaScript监听按键,禁止F12,禁止右键,禁止保存网页【Ctrl+s】等操作

禁止右键 document.oncontextmenu new Function("event.returnValuefalse;") //禁用右键禁止按键 // 监听按键 document.onkeydown function () {// f12if (window.event && window.event.keyCode 123) {alert("F12被禁用");event.keyCode 0…

设计模式-门面模式(Facade)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、定义二、结构 前言 在组件构建过程中,某些接口之间直接依赖会带来很多问题,甚至无法直接实现。采用一层间接接口,来隔离…
最新文章