后端必备技巧之SQL优化

news2024/10/9 15:50:50

日常开发中,几乎都免不了和数据库打交道,说到数据库,我们也需要联想这几个问题:我们写的SQL性能怎么样?有没有优化的空间?如何优化?下面我们来介绍关于SQL性能的命令EXPLAIN

在这里插入图片描述

什么是EXPLAIN命令?

EXPLAIN 是 MySQL 中一个非常有用的命令,用于查看查询的执行计划。通过 EXPLAIN,可以知道查询是如何被优化器执行的,了解 MySQL 如何选择索引、如何关联表等,从而帮助我们优化 SQL 查询。

执行 EXPLAIN 命令的方式:

EXPLAIN SELECT * FROM your_table WHERE your_conditions;

EXPLAIN详解

EXPLAIN 输出的每一行代表查询中的一步操作,而每一列提供了与查询计划相关的特定信息。主要列的含义如下:

1. id

  • 含义:查询的步骤编号。
  • 描述
    • id 值相同的行,表示这些步骤可以并行执行。
    • id 值不同的行,id 值越大,表示优先执行, 例如子查询,一般id值会比较大。

2. select_type

  • 含义:表示查询的类型。
  • 常见类型
    • SIMPLE:简单查询,不包含子查询或联合查询。
    • PRIMARY:查询中的主查询。
    • SUBQUERY:子查询中的第一层查询。
    • DERIVED:派生表(子查询的结果会作为临时表来使用)。
    • UNION:联合查询中的第二个或后续的 SELECT。
    • UNION RESULT:联合查询中的结果集。

3. table

  • 含义:查询涉及的表名或别名。

4. partitions

  • 含义:展示查询使用了哪些分区。通常用于分区表。

5. type

  • 含义:访问类型,表示 MySQL 在查询时使用的访问方式。访问类型从好到差的排序如下:
    • system:表中只有一行(系统表),这是特殊情况。
    • const:表只有一个匹配行,用于主键或唯一索引查询。
    • eq_ref:对于每个来自前一表的行,结合索引查询最多返回一行,通常是主键或唯一索引。
    • ref:非唯一索引扫描,返回匹配的所有行。
    • range:检索指定范围内的行,一般当使用IN, BETWEEN,<, >这种范围查询,基本回事这个类型。
    • index:全表扫描,但扫描的是索引树而不是数据行。
    • ALL:全表扫描。

6. possible_keys

  • 含义:查询可能使用的索引。显示哪些索引能用于查询中的条件。

7. key

  • 含义:MySQL 实际使用的索引。

8. key_len

  • 含义:索引的长度。表示 MySQL 使用索引的字节数,越短表示索引利用率越高。

9. ref

  • 含义:哪些列或常量被用于和 key 指定的索引进行比较。

10. rows

  • 含义:MySQL 估计要读取的行数。基于统计信息,并非精确值。

11. filtered

  • 含义:表示查询条件过滤后返回的行比例。数值为百分比。

12. Extra

  • 含义:额外信息,描述查询的细节。
  • 常见值
    • Using index:查询只使用索引,优化的表现,避免了访问数据行。
    • Using where:使用了 WHERE 过滤条件。
    • Using temporary:MySQL 使用了临时表。
    • Using filesort:MySQL 需要对结果排序,可能是非索引排序,这是性能瓶颈之一。

示例

EXPLAIN SELECT * FROM employees WHERE salary > 5000;

可能的结果:

idselect_typetabletypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEemployeesrangesalary_idxsalary_idx4NULL100050.00Using where

常见优化建议

  • 避免 ALL 类型的查询:尽量避免全表扫描,确保使用了索引。
  • 确保Extra中不出现 Using filesortUsing temporary:它们表明查询效率不高,应该通过索引优化或调整查询来避免。
  • 选择合适的索引:检查 possible_keyskey,确保查询使用了适当的索引。

我认为能最低的级别也需要达到type=range, 如果是range后面的,则代表这个SQL性能很差了,建议优化!

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

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

相关文章

智融SW3536DC/DC+快充协议二合一IC

描述 SW3536 是一款高集成度的多快充协议双口充电芯片&#xff0c;支持 AC 口任意口快充输出&#xff0c;支持双口独立限流。其集成了 7A 高效率同步降压变换器&#xff0c;支持 PPS/ PD/ QC/ AFC/ FCP/ SCP/ PE/ SFCP/TFCP 等多种快充协议&#xff0c;支持 140W 输出功率&…

SGDC复位约束找不到信号问题

在使用spyglass编写sgdc时&#xff0c;对一个内部复位信号约束的时候&#xff0c;报信号找不到。 reset -name TOP.BLOCK3.U_TOP2.BLOCK1.U_TOP1.rst -value 0 但是明明get_pins 可以找到此信号。 由于存在generate命令&#xff0c;导致生成的路径比较奇怪&#xff0c;甚至存…

.NET 一款提权工具:Sharp4PetitPotato

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

深入浅出MongoDB(六)

深入浅出MongoDB&#xff08;六&#xff09; 文章目录 深入浅出MongoDB&#xff08;六&#xff09;分析查询性能原子性和事务字段名称带句点和美元符号查询计划 分析查询性能 mongodb compass提供解释计划标签页&#xff0c;其中显示有关查询性能的统计信息。这些统计信息可用…

简历修订与求职经历 - Chap02.

最新的简历&#xff1a; 1.基本信息 姓名 ---- 学历 学位 本科 理学学士 专业 应用物理 智能仪器仪表 性别 男 出生年月 1976/7 电话 ---- 年龄 48 毕业时间 1998/6 电邮 ---- 籍贯 河南洛阳宜阳 居住地 河南郑州高新区 1.1 期望从事职业信息 机械仪器…

泡沫背后:人工智能的虚幻与现实

人工智能的盛世与泡沫 现今&#xff0c;人工智能热潮席卷科技行业&#xff0c;投资者、创业者和用户都被其光环吸引。然而&#xff0c;深入探讨这种现象&#xff0c;人工智能的泡沫正在形成&#xff0c;乃至具备崩溃的潜质。我们看到的&#xff0c;无非是一场由资本推动的狂欢…

双11大促最值得入手的好物是哪些?双11好物种草清单大全分享!

在这个全民狂欢的购物盛宴中&#xff0c;每个人都希望能以最优惠的价格买到心仪已久的好物&#xff0c;随着科技的飞速发展和生活品质的提升&#xff0c;市场上的产品琳琅满目&#xff0c;让人目不暇接&#xff0c;为了帮助大家在这个双11找到真正值得入手的好物&#xff0c;我…

chatGPT模型接口分享

前言: 仅供学习和交流&#xff0c;请合理使用。 API&#xff1a;https://api.gptnet.org key&#xff1a;sk-x9Rmq3HeHh5z9EIi8wFaXCl02OfxRSk5UAFodYm1o4zo5X3i 支持模型&#xff1a;gpt-3.5-turbo、gpt-3.5-turbo-16k、gpt-4o-mini、llama-3.1-405b 暂时支持以上四个模型…

一键生成PPT在线使用的保姆级教程:告别加班就靠它

已经过完24年所有的法定节假日的你&#xff0c;上班状态还好吗&#xff1f; 小编人倒是挺飘忽的&#xff0c;就那种人在工位&#xff0c;魂仍在青青大草原的感觉&#xff0c;都是牛马却失去了自由奔跑的权利...... 尤其是还要面对节前一堆没完成的工作&#xff0c;手动完成不…

基于Jenkins+K8S构建DevOps自动化运维管理平台

目录 1.k8s助力DevOps在企业落地实践 1.1 传统方式部署项目为什么发布慢&#xff0c;效率低&#xff1f; 1.2 上线一个功能&#xff0c;有多少时间被浪费了&#xff1f; 1.3 如何解决发布慢&#xff0c;效率低的问题呢&#xff1f; 1.5 什么是DevOps&#xff1f; 1.5.1 敏…

买电容笔需要注意什么?2024平替电容笔推荐清单,小白必看!

在当今数字化快速发展的时代&#xff0c;电容笔作为一种重要的数字书写和创作工具&#xff0c;正日益受到人们的青睐。然而现在市场上的电容笔品牌繁多&#xff0c;我们还是需要提前了解产品的情况&#xff0c;避免进入到商家的陷阱中。下面我会介绍电容笔的一些避坑知识&#…

关于常见数据库中SQL分页语法整理

标题 MySQL分页查询常规版升级版 Oracle分页查询常规版升级版 PostgreSQL分页查询常规版升级版 SQL Server分页查询常规版升级版 MySQL分页查询 在MySQL中&#xff0c;分页查询通常使用 LIMIT 关键字来实现。 LIMIT [offset,] rows 其中&#xff0c;offset表示偏移量&#xff…

LLMUnity:在Unity 3D中使用大模型

在本文中&#xff0c;我们将展示如何在 Unity 引擎中使用 LLM&#xff08;大型语言模型&#xff09;&#x1f3ae;。我们将使用 LLMUnity 包&#xff0c;并查看一些示例&#xff0c;了解如何仅用几行代码设置对话交互&#xff01; 免责声明&#xff1a;我是 LLMUnity 的作者。…

STM32通用定时器TIM3的PWM输出实验配置步骤

通用定时器 PWM 输出实验 本小节我们来学习使用通用定时器的 PWM 输出模式。 脉冲宽度调制(PWM)&#xff0c;是英文“Pulse Width Modulation”的缩写&#xff0c;简称脉宽调制&#xff0c;是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。我们可以让定时…

Linux 命令 netstat 的 10 个基本用法

Netstat 简介 Netstat 是一款命令行工具&#xff0c;可用于列出系统上所有的网络套接字连接情况&#xff0c;包括 tcp, udp 以及 unix 套接字&#xff0c;另外它还能列出处于监听状态&#xff08;即等待接入请求&#xff09;的套接字。如果你想确认系统上的 Web 服务有没有起来…

(RAG)技术结合了大模型(LLM)与内部数据,从而实现更智能且相关性更高的 AI 应用

利用先进的生成式 AI 技术&#xff08;如 RAG&#xff09;&#xff0c;释放数据的潜力&#xff0c;推动创新并获取战略优势 主要功能 使用向量数据库优化数据检索和生成 通过 AI 代理提升决策效率并自动化工作流程 克服实施真实 RAG 系统中的常见挑战 购买印刷版或 Kindle …

【C++】速通涉及 “vector” 的经典OJ编程题

【C】速通涉及 “vector” 的经典OJ编程题 一. 杨辉三角解题思路&#xff1a;代码实现&#xff1a; 二. 删除有序数组中的重复项解题思路&#xff1a;代码实现&#xff1a;【C/C】按位运算符使用规制 三. 只出现一次的数字解题思路&#xff1a;代码实现&#xff1a; 四. 只出现…

【D3.js in Action 3 精译_031】3.5.2 DIY实战:在 Observable 平台实现带数据标签的 D3 条形图并改造单元测试模块

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

PyQt5界面美化教程:一键切换四种风格

PyQt5界面美化教程&#xff1a;一键切换四种风格 关于作者 作者&#xff1a;小白熊 作者简介&#xff1a;精通python、matlab、c#语言&#xff0c;擅长机器学习&#xff0c;深度学习&#xff0c;机器视觉&#xff0c;目标检测&#xff0c;图像分类&#xff0c;姿态识别&#x…

【可答疑】基于51单片机的PWM控制智能台灯设计(含仿真、代码、报告、演示视频等)

✨哈喽大家好&#xff0c;这里是每天一杯冰美式oh&#xff0c;985电子本硕&#xff0c;大厂嵌入式在职0.3年&#xff0c;业余时间做做单片机小项目&#xff0c;有需要也可以提供就业指导&#xff08;免费&#xff09;~ &#x1f431;‍&#x1f409;这是51单片机毕业设计100篇…