广告
返回顶部
首页 > 资讯 > 数据库 >怎么精通SQL优化
  • 512
分享到

怎么精通SQL优化

2024-04-02 19:04:59 512人浏览 薄情痞子
摘要

本篇内容主要讲解“怎么精通sql优化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么精通SQL优化”吧!Explain有哪些信息先确认一下试验的Mysql版本

本篇内容主要讲解“怎么精通sql优化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么精通SQL优化”吧!

Explain有哪些信息

先确认一下试验的Mysql版本,这里使用的是5.7.31版本。

怎么精通SQL优化

只需要在SQL语句前加上explain关键字就可以查看执行计划,执行计划包括以下信息:id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、Extra,总共12个字段信息。

怎么精通SQL优化

然后创建三个表:

CREATE TABLE `tb_student` (   `id` int(10) NOT NULL AUTO_INCREMENT,   `name` varchar(36) NOT NULL,   PRIMARY KEY (`id`),   KEY `index_name` (`name`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='学生表';  CREATE TABLE `tb_class` (   `id` INT(10) primary key not null auto_increment,   `name` VARCHAR(36) NOT NULL,  `stu_id` INT(10) NOT NULL,  `tea_id` INT(10) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='班级表';  CREATE TABLE `tb_teacher` (   `id` INT(10) primary key not null auto_increment,   `name` VARCHAR(36) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教师表';

Explain执行计划详解

explain的使用很简单,只需要在SQL语句前加上关键字explain即可,关键是怎么看explain执行后返回的字段信息,这才是重点。

一、id

SELECT识别符。这是SELECT的查询序列号。SQL执行的顺序的标识,SQL从大到小的执行。id列有以下几个注意点:

id相同时,执行顺序由上至下。

id不同时,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行。

EXPLAIN SELECT * FROM `tb_student` WHERE id IN (SELECT stu_id FROM tb_class WHERE tea_id IN(SELECT id FROM tb_teacher WHERE `name` = '马老师'));
怎么精通SQL优化

根据原则,当id不同时,SQL从大到小执行,id相同则从上到下执行。

二、select_type

表示select查询的类型,用于区分各种复杂的查询,例如普通查询,联合查询,子查询等等。

SIMPLE

表示最简单的查询操作,也就是查询SQL语句中没有子查询、uNIOn等操作。

PRIMARY

当查询语句中包含复杂查询的子部分,表示复杂查询中最外层的 select。

SUBQUERY

当 select 或 where 中包含有子查询,该子查询被标记为SUBQUERY。

DERIVED

在SQL语句中包含在from子句中的子查询。

UNION

表示在union中的第二个和随后的select语句。

UNION RESULT

代表从union的临时表中读取数据。

EXPLAIN SELECT u.`name` FROM ((SELECT s.id,s.`name` FROM `tb_student` s)  UNION (SELECT t.id,t.`name` FROM tb_teacher t)) AS u;

代表是id为2和3的select查询的结果进行union操作。

怎么精通SQL优化

MATERIALIZED

MATERIALIZED表示物化子查询,子查询来自视图。

三、table

表示输出结果集的表的表名,并不一定是真实存在的表,也有可能是别名,临时表等等。

四、partitions

表示SQL语句查询时匹配到的分区信息,对于非分区表值为NULL,当查询的是分区表则会显示分区表命中的分区情况。

五、type

需要重点关注的一个字段信息,表示查询使用了哪种类型,在 SQL优化中是一个非常重要的指标,依次从优到差分别是:system > const >  eq_ref > ref > range > index > ALL。

system和const

单表中最多有一条匹配行,查询效率最高,所以这个匹配行的其他列的值可以被优化器在当前查询中当作常量来处理。通常出现在根据主键或者唯一索引进行的查询,system是const的特例,表里只有一条元组匹配时(系统表)为system。

怎么精通SQL优化
怎么精通SQL优化

eq_ref

primary key 或 unique key 索引的所有部分被连接使用  ,最多只会返回一条符合条件的记录,所以这种类型常出现在多表的join查询。

怎么精通SQL优化

ref

相比eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,可能会找到多个符合条件的行。

怎么精通SQL优化

range

使用索引选择行,仅检索给定范围内的行。一般来说是针对一个有索引的字段,给定范围检索数据,通常出现在where语句中使用  bettween...and、<、>、<=、in 等条件查询 。

怎么精通SQL优化

index

扫描全表索引,通常比ALL要快一些。

怎么精通SQL优化

ALL

全表扫描,mysql遍历全表来找到匹配行,性能最差。

怎么精通SQL优化

六、possible_keys

表示在查询中可能使用到的索引来查找,而列出的索引并不一定是最终查询数据所用到的索引。

七、key

跟possible_keys有所区别,key表示查询中实际使用到的索引,若没有使用到索引则显示为NULL。

八、key_len

表示查询用到的索引key的长度(字节数)。如果单列索引,那么就会把整个索引长度计算进去,如果是联合索引,不是所有的列都用到,那么就只计算实际用到的列,因此可以根据key_len来判断联合索引是否生效。

九、ref

显示了哪些列或常量被用于查找索引列上的值。常见的值有:const,func,null,字段名。

十、rows

mysql估算要找到我们所需的记录,需要读取的行数。可以通过这个数据很直观的显示 SQL 性能的好坏,一般情况下 rows 值越小越好。

十一、filtered

指返回结果的行占需要读到的行(rows列的值)的百分比,一般来说越大越好。

十二、Extra

表示额外的信息。此字段能够给出让我们深入理解执行计划进一步的细节信息。

Using index

说明在select查询中使用了覆盖索引。覆盖索引的好处是一条SQL通过索引就可以返回我们需要的数据。

怎么精通SQL优化

Using where

查询时没使用到索引,然后通过where条件过滤获取到所需的数据。

怎么精通SQL优化

Using temporary

表示在查询时,MySQL需要创建一个临时表来保存结果。临时表一般会比较影响性能,应该尽量避免。

怎么精通SQL优化

有时候使用DISTINCT去重时也会产生Using temporary。

怎么精通SQL优化

Using filesort

我们知道索引除了查询中能起作用外,排序也是能起到作用的,所以当SQL中包含 ORDER BY  操作,而且无法利用索引完成排序操作的时候,MySQL不得不选择相应的排序算法来实现,这时就会出现Using filesort,应该尽量避免使用Using  filesort。

怎么精通SQL优化

总结

一般优化SQL语句第一步是要知道这条SQL语句有哪些需要优化的,explain执行计划就相当于一面镜子,能把详细的执行情况给开发者列出来。所以说善用explain执行计划,能解决80%的SQL优化问题。

explain的信息中,一般我们要关心的是type,看是什么级别,如果是在互联网公司一般需要在range以上的级别,接着关心的是Extra,有没有出现filesort或者using  template,一旦出现就要想办法避免,接着再看key使用的是什么索引,还有看filtered筛选比是多少。

到此,相信大家对“怎么精通SQL优化”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么精通SQL优化

本文链接: https://www.lsjlt.com/news/61917.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么精通SQL优化
    本篇内容主要讲解“怎么精通SQL优化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么精通SQL优化”吧!Explain有哪些信息先确认一下试验的MySQL版本...
    99+
    2022-10-18
  • 面试官:不会看SQL执行计划,简历也敢写精通SQL优化?
    这是我的第 204 期分享 作者 | 程序员内点事来源 | 程序员内点事(ID:chengxy-nds)分享 | Java中文社群(ID:javacn666) 昨天中午在食堂,和部门的技术大牛们坐在一桌吃饭,作为一个卑微技术渣仔默默的吃着饭...
    99+
    2018-09-06
    面试官:不会看SQL执行计划,简历也敢写精通SQL优化? 数据库入门 数据库基础教程 数据库 mysql
  • SQL怎么优化
    这篇文章将为大家详细讲解有关SQL怎么优化,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。为什么要优化系统的吞吐量瓶颈往往出现在数据库的访问速度上,即随着应用程序的运行,数...
    99+
    2022-10-18
  • 怎么优化SQL
    小编给大家分享一下怎么优化SQL,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!判断问题SQL判断SQL是否有问题时可以通过两个表...
    99+
    2022-10-18
  • 精通SQL结构化查询---学习笔记3
    对于汉字的排序,是按首字母的顺序来排序的。使用DISTINCT是要要付出代价的;因为要去掉重复值,必须对结果关系进行排序,相同的元组排列在一起,只有按这种方法对元组进行分组才能去掉重复值,而这一工作甚至比查...
    99+
    2022-10-18
  • Ceph入门到精通-sysctl参数优化
    sysctl.conf 是一个文件,通常用于在 Linux 操作系统中配置内核参数。这些参数可以控制网络、文件系统、内存管理等各方面的行为。 99-xx.yml 可能是一个文件名,其中 99- 是一个特定的命名约定。在 sysctl.con...
    99+
    2023-09-05
    ceph php 服务器
  • 慢SQL怎么优化
    本篇内容介绍了“慢SQL怎么优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!慢SQL诊断系统层面:检查系...
    99+
    2022-10-19
  • SQL该怎么优化
    这篇文章主要讲解了“SQL该怎么优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL该怎么优化”吧!一、避免进行null判断。 应尽量避免在 wher&...
    99+
    2022-10-19
  • SQL语句怎么优化
    这篇文章运用简单易懂的例子给大家介绍SQL语句怎么优化,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、常见的SQL实践(1)负向条件查询不能使用索引select * fro...
    99+
    2022-10-18
  • 怎么优化SQL代码
    这篇文章主要介绍“怎么优化SQL代码”,在日常操作中,相信很多人在怎么优化SQL代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么优化SQL代码”的疑惑有所帮助!接下来,...
    99+
    2022-10-19
  • MySql中sql怎么优化
    这篇文章主要介绍了MySql中sql怎么优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、explain返回列简介1、type常用关键字...
    99+
    2022-10-19
  • 精通ASP编程算法:如何优化缓存?
    ASP编程算法是Web开发中的重要一环。优化缓存是提高ASP程序性能的重要手段之一。本文将介绍ASP编程中的缓存优化技巧,包括ASP中的缓存机制、如何使用缓存、如何设置缓存,以及如何优化缓存。 一、ASP中的缓存机制 ASP中的缓存机制是基...
    99+
    2023-06-20
    编程算法 缓存 开发技术
  • javascript怎么才算精通
    随着互联网和技术的高速发展,Javascript已经成为项目开发中最常用的编程语言之一。如果你想成为一个出色的前端Javascript开发工程师,那么必须具备一些技能和经验,并且需要对Javascript有深入的理解。本文将介绍Javasc...
    99+
    2023-05-21
  • 怎么优化SQL数据库
    怎么优化SQL数据库?这篇文章详细介绍了SQL数据库的优化原因和优化方案,阅读完整文相信大家对SQL数据库的优化有了一定的认识。一:优化说明A:有数据表明,用户可以承受的最大等待时间为8秒。数据库优化策略有...
    99+
    2022-10-18
  • MySQL的慢SQL怎么优化
    本篇内容主要讲解“MySQL的慢SQL怎么优化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL的慢SQL怎么优化”吧!索引类似大学图书馆建书目索引,可以...
    99+
    2022-10-18
  • SQL Server性能怎么优化
    本篇内容主要讲解“SQL Server性能怎么优化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL Server性能怎么优化”吧!数据库性能诊断和优化是提高数据库性能和稳定性的关键技术之一。...
    99+
    2023-06-27
  • SQL UPDATE语句怎么优化
    要优化SQL UPDATE语句,可以考虑以下几个方面:1. 限制更新的行数:如果你只需要更新部分记录,可以使用WHERE子句...
    99+
    2023-09-05
    SQL
  • 精通PHP编程的十大必备优化策略
    PHP 编程是创建有效且安全的 Web 应用程序的一项基本任务。在本文中,我们将探讨一些最佳策略,帮助您编写高质量、更具可读性、可维护性和安全性的 PHP 代码。1.遵循编码标准采用一致的编码标准对于保持代码可读性至关重要,尤其是在具有多个...
    99+
    2023-10-22
    php
  • 怎么优化SQL查询语句
    这篇文章主要讲解了“怎么优化SQL查询语句”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么优化SQL查询语句”吧!1、 首先要搞明白什么叫执行计划执行计划...
    99+
    2022-10-18
  • Sql Server 中怎么优化索引
    Sql Server 中怎么优化索引,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。代码如下: --Begin Index(索引) 分析优...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作