好程序员

Java

学习路线之

MySQL

的执行计划。什么是执行计划?

执行计划通常是开发者优化

SQL

语句的第一步。

MySQL

在解析

SQL

语句时,会生成多套执行方案,然后内部会进行一个成本的计算,然后通过优化器选择一个最优的方案执行,然后根据这个方案会生成一个执行计划。开发者通过查看

SQL

语句的执行计划,可以直观的了解到

MySQL

是如何解析执行这条

SQL

语句的,然后再针对性的进行优化。

如何查看

SQL

语句的执行计划?

语法:

explain  select

语句

;

执行计划每个字段的含义:

id

(重要)

:主要用来标识

SQL

语句的解析执行顺序

id

相同的情况:

id

不同的情况:

id

相同不同同时存在:

id

null

的情况:

比较少见,

id

null

的部分一定是最后执行的

select_type:主要用来标识当前查询的类型

mysql

查询的分类:

简单查询:没有子查询以及

union

sql

复杂查询:

where

select

后面有子查询

from

后面有子查询

包换

union

关键字

SIMPLE

:标识当前查询是一个简单查询

PRIMARY

:如果是一个复杂查询(子查询或者

union

),则最外层的

SQL

语句会被标记成这个类型

SUBQUERY

:用来标记一个子查询(

where

select

)

注意:通常来说被标记成

PRIMARY

的部分,是最后执行的部分

DERIVED

:用来标记一个衍生查询(

from

后面的子查询)

UNION

:标记

union

关键字后面的查询部分

UNION RESULT

:标记

union

结果的合并部分

type(

重要

)

:用来标识当前这条

SQL

语句是用哪种方式访问的数据行(最差

->

最优)

all

:表示当前

MySQL

是采用全表扫描的方式访问的数据行

index

:表示当前是按照全索引扫描的方式访问所有数据行

range

:表示查询了索引的某个范围

ref

:表示查询了索引的某个值,但是这个值是可能重复的(只会出现在非唯一性索引的字段上)

eq_ref

:表示查询了索引的某个值,但是这个值是唯一的(只会出现在主键、唯一性索引上,并且需要结合连接查询)

const

:查询索引的某个唯一性值,

mysql

会将这个条件优化成一个常量

system

(正式开发基本不会出现):表示

mysql

可以确定查询的表结果一定只有一条

null

(性能最好,但是作用不大):表示当前

SQL

语句直接在解析时就能获得结果,不能去查询记录行

注意:通常在实际开发过程中,需要将

SQL

语句优化到

range

以上的级别,但是一定要具体问题具体分析,有些时候

all

反而是更好的行为。

possible_keys

:用来标记当前这条

SQL

语句可能用上的索引列表

key

(重要)

:用来标识当前这个

SQL

语句用上了哪个索引

注意:有可能一个索引出现在

possible_keys

中,但是没有出现在

key

中;也有可能一个索引出现在

key

中,但是没有出现在

possible_keys

中。

explain select * from student force index(idx_age) order by age;

标识手动设置

MySQL

执行的索引,但是最好不要这么干

key_len:标识当前使用到的索引长度,这个值越大,说明越多的条件使用上了索引

rows(

重要

)

:表示当前查询可能访问的记录行数,这个值越小越好,最好显示

1

注意:通常在实际的优化过程中,需要参考

type

rows

两个字段来决定是否需要进行优化。

比如

type

all

,但是

rows

1

,这种情况下,其实完全无需优化。

比如

type

ref,

但是

rows

10W

,那么这条

sql

语句性能肯定比不上

all - 1

Extra(

重要

)

:表示当前一些额外的信息显示的地方

Using index

:说明当前的执行计划用上了覆盖索引。

Using temporary

:说明当前内部使用了临时表

(

分组、排序

)

Using filesort

:说明使用了文件排序,这个排序有可能在内存上排序,也有可能在硬盘上排序,如果是在硬盘上排序,则最好优化一下(比如通过索引进行排序)

Using where

:表示使用了过滤条件

java获取mysql执行计划_好程序员Java学习路线之MySQL的执行计划相关推荐

  1. java双引号的转义字符_好程序员Java教程分享常见的转义字符

    原标题:好程序员Java教程分享常见的转义字符 好程序员Java教程分享常见的转义字符,在Java字符常量中,反斜杠(\)是一个特殊的字符,被称为转义字符,它的作用是用来转义后面一个字符.转义后的字符 ...

  2. mount: 未知的文件系统类型“vboxsf”_好程序员云计算学习路线教程大纲课件:Mount 挂载详解...

    好程序员云计算学习路线教程大纲课件:Mount 挂载详解: ====================================================================== ...

  3. system.img解包打包工具_好程序员云计算学习路线分享文件打包及压缩

    好程序员云计算学习路线分享文件打包及压缩 好程序员 建议针对目录 Demo: 复制未打包的文件到远程主机 [root@yangs ~]# du -sh /etc 39M /etc [root@yang ...

  4. Java工程师成神之路:程序员的学习路线规划以及书籍推荐

    2019独角兽企业重金招聘Python工程师标准>>> 一.基础篇 面向对象 什么是面向对象 面向对象.面向过程 面向对象的三大基本特征和五大基本原则 平台无关性 Java如何实现的 ...

  5. java web swing 教程_好程序员Java教程解读什么是swing

    原标题:好程序员Java教程解读什么是swing 好程序员Java教程解读什么是swing,swing是java GUI应用程序,也就是java做的桌面应用.运行swing程序要求用户电脑上有java ...

  6. 2019年Java程序员的学习路线

    2019年Java程序员的学习路线 一.基础篇 面向对象 什么是面向对象 面向对象.面向过程 面向对象的三大基本特征和五大基本原则 平台无关性 Java如何实现的平台无关 JVM还支持哪些语言(Kot ...

  7. 好程序员Python学习路线分享Linux和数据库部分

    好程序员Python学习路线分享Linux和数据库部分,技能树:掌握Linux操作系统管理技术,可以搭建几乎所有Linux环境服务器. 学习线路简单示意图: 知识点细化: Linux操作系统:常见操作 ...

  8. ajax不执行_好程序员Java学习路线分享原生Ajax的使用

    好程序员Java学习路线分享原生Ajax的使用,首先我们先来看一下什么是 AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX 就是 异步.JavaScript ...

  9. bytes数组转string指定编码_好程序员Java学习路线分享Java基础之string

    好程序员Java学习路线分享Java基础之string 好程序员Java培训 先来讲一下字符串 字串符分类: 不可变字符串:----String.字符串本身不能发生改变,与指向字符串的引用无关. St ...

最新文章

  1. 异常“本机框架位于调用堆栈顶部,因此无法计算表达式的值”的解决办法
  2. python画柱形图-Python绘制柱状图
  3. DLL+ ActiveX控件+WEB页面调用例子
  4. Java获得泛型类中T的实例
  5. SQL SERVER 2000安装遇到的问题小汇总(转载)
  6. 50句看后可以变换心情豁然开朗的话
  7. jersey tomcat MySQL_使用 Jersey 和 Apache Tomcat 7 构建 JAX-RS 环境
  8. 疫情之下,你有多久没回过家了?
  9. C++ begin( ) cbegin( ) end() cend()区别
  10. 计算机机房的荷载,​计算机信息中心机房建设标准
  11. Epic Games Launcher 无效驱动器E
  12. SuperMap矢量瓦片优化方案
  13. 校OJ P1220 -- zyf的现状
  14. ROS2 中的 launch 文件入门的 6 个疑问
  15. oracle数据库怎么进行树查询,oracle树查询的实现
  16. 三种等待方式:强制等待、显式等待、隐式等待
  17. 红米手机html文件,手机教程知识:红米手机显示隐藏文件的操作流程
  18. 有哪些编辑图片加文字的软件?这些软件值得收藏
  19. 每天学一点英文:Espresso 20210903
  20. 2021年最具影响力的七起网络安全事件

热门文章

  1. jpush java api_JPush極光推送Java服務器端API
  2. python 进程池 等待数量_【2020Python修炼记】python并发编程(六)补充—进程池和线程池...
  3. JSP+Tomcat+SQL Server 2000+JDBC实现合同信息管理系统
  4. mysql索引参数_MySQL索引介绍
  5. linux服务器之间文件复制命令
  6. 移动app显示远程服务器错误,KIS移动应用常见问题汇总
  7. antd listView中onEndReached()失效
  8. jquery表单属性筛选元素
  9. H5 input输入限制最大位数,和调用小键盘需求发生冲突的解决办法
  10. JQ css3 导航栏到底部上移