MySQL使用问题_mysql的使用

MySQL使用问题_mysql的使用MySQL常见的性能瓶颈一般都是出现在CPU和I/O上,即在数据装入内存中或磁盘上读取数据时,CPU发生了饱和或装入数据过大,内存容量不足,磁盘I/O性能被限制。这时候就要使用到Explain关键字来进行分析和调优。 基本使用 Explain关键字可以用来模拟优化器执行SQL查询语句,从而了解SQL语句的处理方式,来达到分析查询语句或表结构的性能瓶颈。通过Explain可以获得表…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

MySQL常见的性能瓶颈一般都是出现在CPU和I/O上,即在数据装入内存中或磁盘上读取数据时,CPU发生了饱和或装入数据过大,内存容量不足,磁盘I/O性能被限制。这时候就要使用到Explain关键字来进行分析和调优。

  • 基本使用

Explain关键字可以用来模拟优化器执行SQL查询语句,从而了解SQL语句的处理方式,来达到分析查询语句或表结构的性能瓶颈。

通过Explain可以获得

  1. 表的读取顺序和引用
  2. 数据读取操作的基本类型
  3. 可使用的索引以及实际使用的索引
  4. 优化器的查询行数

使用方法:

Explain + SQL语句

MySQL使用问题_mysql的使用

可得到的信息

MySQL使用问题_mysql的使用

  • 参数意义

  • id

表示select查询的序列编号,即在查询中执行select语句或操作表的顺序,查询出来的id有两种情况,可同时存在

id相同,执行顺序为从上到下

MySQL使用问题_mysql的使用

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

MySQL使用问题_mysql的使用

  • select_type

查询的类型,主要用于区分普通查询、联合查询、子查询等不同的查询方式,有以下几种

1. SIMPLE:简单的SELECT查询,不包含子查询或UNION

2. PRIMARY:查询中包含子查询等复杂查询时,外层查询则被标记为PRIMARY

3. SUBQUERY:在SELECT或WHERE中包含子查询

4. DERIVED:在FROM中包含了子查询

5. UNION:在关键字UNION后的查询

6. UNION RESULT:从UNION表中获得结果的查询

  • table

表明数据是从那张表中查询的,关联了哪些表

  • partitions

表示查找的是哪个分区的数据​​​​​​​

  • type

​​​​​​​表示查询使用了哪种类型,具体类型有

  1. system:表只有一行记录,等同于系统表,这是const类型的特例,基本不会出现
  2. const:表示通过索引一次就找到了匹配的数据,例如通过主键匹配的条件查询
  3. eq_ref: 唯一性索引扫描,对每个索引键表中只有一条相对应的记录,也就是主键或唯一索引和他们对应的数据这样的情况
  4. ref: 非唯一性索引扫描,即索引查找出对应多个符合条件的数据
  5. range: 只检索给定范围的行,使用一个索引来选择行,一般是between、<、>、in等范围查询
  6. index: 从索引中读取全表
  7. all:从硬盘中读取全表,即全数据读取

查询效率:从优到劣顺序排列

  • possible_keys

​​​​​​​表示可能使用到的索引,通常如果查询的字段上有索引就会显示,虽然不一定会使用到

  • key

​​​​​​​实际使用到的索引,如果在查询中使用到了覆盖索引,则该索引会和查询的select字段重叠

  • key_len

​​​​​​​索引的长度,越短越好,该值为表计算估计出的最大长度,而不是实际使用长度

  • ref

​​​​​​​显示索引的哪一列被使用到了

  • rows

​​​​​​​预计找出匹配数据所需要读取的行数

  • Extra

​​​​​​​额外的事务,是比较重要的用于分析检索效率的信息,包含以下:

  1. Using filesort:MySQL使用了一个外部的索引排序:“文件排序”,表示无法使用表内的索引顺序进行读取
  2. Using temporary:使用了临时表,该信息通常在使用了排序或分组查询时出现,MySQL使用了临时表来存储order by和group by需要进行排序的查询结果
  3. Using index:在select操作中使用了覆盖索引,即只从索引中就可以获得数据,不必读取数据行。覆盖索引:是建立在原有索引基础上的新的索引。
  4. Using where:使用了where过滤,当同时出现Using index时,表示索引被用于读取索引键值的操作,索引键即为where的过滤条件
  5. using join buffer:使用了连接缓存
  6. impossible where:where子句的值为false,不能被用于查找数据
  7. select tables optimized away:表示索引在没有group by的情况下,在查询阶段就优化了cont(*)等函数操作
  8. distinct:优化了distinct操作,匹配到第一组所需的数据后停止查找相同数据的操作

MySQL使用问题_mysql的使用

扫码关注我的微信公众号:Java架构师进阶编程  获取最新面试题,电子书

专注分享Java技术干货,包括JVM、SpringBoot、SpringCloud、数据库、架构设计、面试题、电子书等,期待你的关注!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180825.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Origin绘图快速上手指南

    Origin绘图快速上手指南1、创建工程打开origin后,点击菜单栏“文件”,选择“项目另存为”,给项目命名,并存到某个工作路径。2、导入数据然后将excel中的数据(只要数据)选中后复制到Book1中,从第5行开始粘贴。可以在侧面打开“项目管理器”,给表格“Book1”重命名为“曲线数据”。还可以在表格的“长单位”处给每列数据加上标签。3、那么这时可以直接使用Origin的自动绘图功能了。选择A、B、C所有列,然后点击菜单栏的“绘图”,选择一个折线图,双击即可绘图。这样呢就是将两条曲线放到同一张图中了。如果想要自定

    2022年5月31日
    55
  • rac 10g 10.2.0.1升级到10.2.0.5具体解释[通俗易懂]

    rac 10g 10.2.0.1升级到10.2.0.5具体解释

    2022年2月6日
    59
  • windows-DLL注入「建议收藏」

    windows-DLL注入「建议收藏」DLL注入

    2022年5月17日
    47
  • 计算机网络基础谢希仁第七版答案(计算机网络第七版答案pdf)

    写在前面这篇博客是当时在大二的时候为了学习计网总结的一篇学习笔记,其实当时的做法和抄书差不多,但是时隔两年的时间没想到有这么多的同学会来关注学习,实在受宠若惊;现在我已经大四,而且刚刚经历过秋招(2019/12),并且签约了一家薪资待遇不错的Java开发岗,所以在闲下来的时候准备将这篇博客重新整理一下,主要为了几方面:一·将之前没有整理到的内容补充详细;二·为重难点的部分加上详…

    2022年4月18日
    55
  • vim编辑器怎么显示行数(linux统计行数vim)

    Ubuntu系统16.04版本vim编辑器显示行数一种是临时显示。进入vim编辑器后,在命令行模式下,输入:set nu或者set number,按下回车后,就会显示行数。输入:set nonu,就会隐藏行数。此方法,在关闭当前vim后再次打开vim编辑器,行数就会消失,需要再次输入上述命令。一种是永久显示。想要开机后再次打开vim编辑器一直显示行数,就需要修改vim的

    2022年4月11日
    45
  • quota命令详细拓展使用方法,RHEL 7中quota命令搭载方法!磁盘容量配额!

    磁盘容量配额Linux系统的设计初衷就是让许多人一起使用并执行各自的任务,从而成为多用户、多任务的操作系统。但是,硬件资源是固定且有限的,如果某些用户不断地在Linux系统上创建文件或者存放电影,硬盘空间总有一天会被占满。针对这种情况,root管理员就需要使用磁盘容量配额服务来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。可以使用quota命令进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。quota命令还有软限

    2022年4月7日
    212

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号