[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.hqwc.cn/news/265265.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四十三、Redis基础

目录 一、认识NoSql 1、定义: 2、常见语法 3、与关系型数据库(SQL)的区别: 二、认识Redis 1、定义: 2、特征: 3、Key的结构: 三、安装Redis 四、Redis常见命令 1、数据结构介绍 2、…

Mysql dumpling 导入导出sql文件

一:导出命令 mysqldump -u root -p saishi > saishi.sql mysqldump -u root -p saishi > saishi.sql root是用户名 saishi是数据库名 saishi.sql导出文件名 二:选择导入的数据库 cd到安装mysql的文件下(找不到可以用:wh…

IP地址SSL证书申请指南

1,选择 与基于域名的SSL证书类似,IP地址SSL证书也分为多种类型,包括DV和OV 等。DV证书只需验证域名的所有权,适合个人和小型企业;OV证书除了验证域名所有权外,还需要验证申请单位的真实身份信息&#xff0…

代码随想录算法训练营第48天| 198.打家劫舍 213.打家劫舍II 337.打家劫舍III

JAVA代码编写 198.打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给…

Python从入门到精通

一、Python基础语法 1、字面量 掌握字面量的含义了解常见的字面量类型基于print语句完成各类字面量的输出 什么是字面量? 字面量:在代码中,被写下来的的固定的值,称之为字面量 常用的值类型 Python中常用的有6种值&#xff…

AI联盟!甲骨文、英特尔、Meta等57家组织参与

全球社交、科技巨头Meta在官网宣布,与甲骨文、英特尔、AMD、IBM、索尼、戴尔等57家科技、学术研究机构组成——AI联盟。 在这57家组织中很多是大模型开源领域的领导者,例如,类ChatGPT模型的开源鼻祖Meta; 文生图领域最知名开源平…

pytorch与cuda环境安装操作

Pytorch 安装 11.8 Windows版本的 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 在cmd或者power shell中运行 ![需要python环境] 安装完成后可以使用以下命令检测cuda是否安装好 nvidia-smi Thu Dec 7 19:51:03 2023 ----…

外贸自建站是什么意思?做海洋建站的好处?

外贸自建站什么意思?跨境电商自建站的好处有哪些? 外贸自建站是指外贸企业或个人通过建站的方式,搭建自己的电子商务网站,用于开展海外贸易和拓展国际市场。海洋建站将详细介绍外贸自建站,帮助您更好地理解并开展外贸…

Git篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、git pull 和 git fetch 有什么区别?二、git中的“staging area”或“index”是什么?三、什么是 git stash?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

Linux常用命令——zip命令

文章目录 1. 简介2. 基本语法3. 常用选项4. 使用实例实例 1: 压缩单个文件实例 2: 压缩多个文件实例 3: 递归压缩目录实例 4: 创建密码保护的压缩文件 5. 结论 1. 简介 zip 是一个在Linux系统中广泛使用的压缩工具。它可以用来创建压缩文件(通常是.zip格式&#xf…

泡沫包装市场分析:预计2029年将达到659亿元

泡沫包装,简单地讲,就是用数学方法对无线电测量或光学测量所获得的弹道数据进行检验、整理、校正、计算,减小或消除数据的误差,得出反映运载火箭运动轨迹的精确弹道参数。通常所说的泡沫包装,主要是指由可发性聚苯乙烯…

Modelscope Agent初体验与思考

背景:LLM → \to → Agent ChatGPT为代表的大语言模型就不用过多的介绍了,ChatGPT很强大,但是也有做不到的东西。 例如: 实时查询问题:实时的天气,地理位置,最新新闻报道,现实世…