java获取mysql执行计划_好程序员Java学习路线之MySQL的执行计划
好程序员
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的执行计划相关推荐
- java双引号的转义字符_好程序员Java教程分享常见的转义字符
原标题:好程序员Java教程分享常见的转义字符 好程序员Java教程分享常见的转义字符,在Java字符常量中,反斜杠(\)是一个特殊的字符,被称为转义字符,它的作用是用来转义后面一个字符.转义后的字符 ...
- mount: 未知的文件系统类型“vboxsf”_好程序员云计算学习路线教程大纲课件:Mount 挂载详解...
好程序员云计算学习路线教程大纲课件:Mount 挂载详解: ====================================================================== ...
- system.img解包打包工具_好程序员云计算学习路线分享文件打包及压缩
好程序员云计算学习路线分享文件打包及压缩 好程序员 建议针对目录 Demo: 复制未打包的文件到远程主机 [root@yangs ~]# du -sh /etc 39M /etc [root@yang ...
- Java工程师成神之路:程序员的学习路线规划以及书籍推荐
2019独角兽企业重金招聘Python工程师标准>>> 一.基础篇 面向对象 什么是面向对象 面向对象.面向过程 面向对象的三大基本特征和五大基本原则 平台无关性 Java如何实现的 ...
- java web swing 教程_好程序员Java教程解读什么是swing
原标题:好程序员Java教程解读什么是swing 好程序员Java教程解读什么是swing,swing是java GUI应用程序,也就是java做的桌面应用.运行swing程序要求用户电脑上有java ...
- 2019年Java程序员的学习路线
2019年Java程序员的学习路线 一.基础篇 面向对象 什么是面向对象 面向对象.面向过程 面向对象的三大基本特征和五大基本原则 平台无关性 Java如何实现的平台无关 JVM还支持哪些语言(Kot ...
- 好程序员Python学习路线分享Linux和数据库部分
好程序员Python学习路线分享Linux和数据库部分,技能树:掌握Linux操作系统管理技术,可以搭建几乎所有Linux环境服务器. 学习线路简单示意图: 知识点细化: Linux操作系统:常见操作 ...
- ajax不执行_好程序员Java学习路线分享原生Ajax的使用
好程序员Java学习路线分享原生Ajax的使用,首先我们先来看一下什么是 AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX 就是 异步.JavaScript ...
- bytes数组转string指定编码_好程序员Java学习路线分享Java基础之string
好程序员Java学习路线分享Java基础之string 好程序员Java培训 先来讲一下字符串 字串符分类: 不可变字符串:----String.字符串本身不能发生改变,与指向字符串的引用无关. St ...
最新文章
- 异常“本机框架位于调用堆栈顶部,因此无法计算表达式的值”的解决办法
- python画柱形图-Python绘制柱状图
- DLL+ ActiveX控件+WEB页面调用例子
- Java获得泛型类中T的实例
- SQL SERVER 2000安装遇到的问题小汇总(转载)
- 50句看后可以变换心情豁然开朗的话
- jersey tomcat MySQL_使用 Jersey 和 Apache Tomcat 7 构建 JAX-RS 环境
- 疫情之下,你有多久没回过家了?
- C++ begin( ) cbegin( ) end() cend()区别
- 计算机机房的荷载,​计算机信息中心机房建设标准
- Epic Games Launcher 无效驱动器E
- SuperMap矢量瓦片优化方案
- 校OJ P1220 -- zyf的现状
- ROS2 中的 launch 文件入门的 6 个疑问
- oracle数据库怎么进行树查询,oracle树查询的实现
- 三种等待方式:强制等待、显式等待、隐式等待
- 红米手机html文件,手机教程知识:红米手机显示隐藏文件的操作流程
- 有哪些编辑图片加文字的软件?这些软件值得收藏
- 每天学一点英文:Espresso 20210903
- 2021年最具影响力的七起网络安全事件
热门文章
- jpush java api_JPush極光推送Java服務器端API
- python 进程池 等待数量_【2020Python修炼记】python并发编程(六)补充—进程池和线程池...
- JSP+Tomcat+SQL Server 2000+JDBC实现合同信息管理系统
- mysql索引参数_MySQL索引介绍
- linux服务器之间文件复制命令
- 移动app显示远程服务器错误,KIS移动应用常见问题汇总
- antd listView中onEndReached()失效
- jquery表单属性筛选元素
- H5 input输入限制最大位数,和调用小键盘需求发生冲突的解决办法
- JQ css3 导航栏到底部上移