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

好程序员

Java

学习路线之

MySQL

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

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

SQL

语句的第一步。

MySQL

在解析

SQL

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

SQL

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

MySQL

是如何解析执行这条

SQL

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

如何查看

SQL

语句的执行计划?

语法:

explain  select

语句

;

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

id

(重要)

:主要用来标识

SQL

语句的解析执行顺序

id

相同的情况:

807b375b1c5ad7967017d324745c7eca.png

id

不同的情况:

d2be94b851fba5ea043ae371478cbc04.png

id

相同不同同时存在:

6bd8790628c18d9ed35d145940f8f580.png

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

:表示使用了过滤条件

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

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

相关文章

Web系统开发构架再思考-前后端的完全分离

前言 前后端完全分离其实一直是Web开发人员的梦想,也一直是我的梦想,遥想当年,无论是直接在代码里面输出HTML,还是在HTML里面嵌入各种代码,都不能让人感到满意.期间的痛苦和纠结,我想所有Web开发人员都深有感触. 由于最近几年一直在MS平台,从Web Form到MVC,MS平台虽然易用好学,…

C++程序设计基础

01 1 预编译常用的有&#xff0c;宏定义和包含库。2 库&#xff1a;是实用工具的集和&#xff0c;由程序员编写&#xff0c;可以完成一些特定的功能。3 <> 系统库 ""用户自定义库。4 宏定义&#xff1a;定义符号常量&#xff0c;符号常量就是给常量取的名字。常…

文科思维Java_开源之Processing:这好玩的编程语言是为文科生艺术家准备的

说起编程语言&#xff0c;我们很多时候第一反应就是很难&#xff0c;都是理工科计算机相关行业的人才学的&#xff0c;都是为理科生掉头发准备的。的确&#xff0c;计算机的严谨&#xff0c;注定要求开发应用的人有缜密的理工科的理性逻辑思维&#xff0c;然而一人客从另一方面…

第一章导言的笔记与思考

Writer&#xff1a;BYSocket&#xff08;泥沙砖瓦浆木匠&#xff09; 微博&#xff1a;BYSocket 豆瓣&#xff1a;BYSocket ~&#xff1a;较重要 ~~&#xff1a;重要 1.1 hello&#xff0c;world ~初学人来说还是一大障碍&#xff0c;手写编写程序文本&#xff0c;然后成功的进…

C 和 Object- C 中得 #ifdef 和#ifndef

很多宏是为了进行条件编译。一般情况下&#xff0c;源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译&#xff0c;也就是对一部分内容指定编译的条件&#xff0c;这就是“条件编译”。有时&#xff0c;希望当满足某条件时对一组语句进行编…

C语言基础小斋

一、C语言数据类型 ok&#xff0c;如我们所知&#xff0c;C语言作为大学工科专业的必学课程&#xff0c;其重要性不言而喻&#xff1b;它为我们提供了丰富的数据类型&#xff0c;所以它很适合程序员来编写 数据库 &#xff0c;如DB2、Oracale都是C语言编写的。 那么C语言具体又…

《Cracking the Coding Interview》——第11章:排序和搜索——题目8

2014-03-21 22:23 题目&#xff1a;假设你一开始有一个空数组&#xff0c;你在读入一些整数并将其插入到数组中&#xff0c;保证插入之后数组一直按升序排列。在读入的过程中&#xff0c;你还可以进行一种操作&#xff1a;查询某个值val是否存在于数组中&#xff0c;并给出这个…

gradle打包java项目_gradle打包java项目

转载地址&#xff1a;http://www.gfzj.us/series/gradle/2014/12/12/gradle%E5%B0%8F%E7%B3%BB%E5%88%97(4)--gradle%E6%89%93%E5%8C%85java%E9%A1%B9%E7%9B%AE.html以gradle小系列所举例子为示例&#xff0c;在此处介绍两种gradle发布java项目的方法&#xff1a;fat jar方式该…

堡垒机2.0

一、编辑系统环境变量&#xff0c;让用户登录后自动调用脚本 1 vim /etc/profile 2 python /baolei/ssh_login.py 3 # 判断登录用户是否为 root 用户&#xff0c;root用户退出程序不进行logout操作&#xff0c;否则则logout 4 if [ $? ! 10 ];then 5 echo "Good …

Flex中利用ByteArray与BitmapData互相转换实现图片的二进制保存与复原

Flex中利用ByteArray与BitmapData互相转换实现图片的二进制保存与复原 近 日在项目当中需要将图片保存到共享对象当中&#xff0c;开始用了俩天的时间做了对象的序列化&#xff0c;并以BitmapData的形式进行了图片的序列化保存共享&#xff0c;因为系统 没有提供更好的接口所以…

java8自定义收集器_使用自定义收集器进行Java 8分组?

我有以下课程。class Person {String name;LocalDate birthday;Sex gender;String emailAddress;public int getAge() {return birthday.until(IsoChronology.INSTANCE.dateNow()).getYears();}public String getName() {return name;}}我希望能够按年龄分组&#xff0c;然后收…

poj 1862 Stripies/优先队列

原题链接&#xff1a;http://poj.org/problem?id1862 简单题&#xff0c;贪心优先队列主要练习一下stl大根堆 写了几种实现方式写成类的形式还是要慢一些。。。 手打的heap&#xff1a; 1&#xff1a; 1 #include<cstdio>2 #include<cstdlib>3 #include<cmath&…

java url下载ics_使用Microsoft Graph API处理外部(Internet / .ics)日历URL

在新的Graph API中&#xff0c;是否可以根据外部.ics日历网址为用户创建新日历&#xff1f;我d like to do is to use a daemon to inject a link to an external calendar into the list of calendars a user has if they don已经有了这样一个链接 . 这将有效地复制用户可以在…

命令行生成jar文件

1.打开cmd&#xff0c;进入编译完后所有类的当前目录 命令行 jar -cvf javaname.jar *.class 这时已经生成了 javaname.jar 不过如果有多个类&#xff0c;双击打不开 2.解压javaname.jar 进入META-INF&#xff0c;编辑MANIFEST.MF: 尾行写入Main-Class:&#xff08;&…

Github链接地址

https://github.com/kzj1/test转载于:https://www.cnblogs.com/lalal/p/4456923.html

java foreach和for循环区别_java相关:老生常谈foreach(增强for循环)和for的区别

java相关&#xff1a;老生常谈foreach(增强for循环)和for的区别发布于 2020-8-18|复制链接下面小妖就为大家带来一篇老生常谈foreach(增强for循环)和for的区别。小妖觉得挺不错的&#xff0c;现在就分享给大家&#xff0c;也给大家做个参考。一起跟随小妖过来看看吧首先说一下f…

关于事件冒泡和捕获的问题

由于习惯于jquery的方便操作&#xff0c;往往让我们慢慢淡忘了原生js应有的功能和属性&#xff0c;今天重温一下事件冒泡和捕获问题。 冒泡&#xff1a;从内向外&#xff0c;如&#xff1a;div > body > html (不同浏览器稍有不同) 捕获&#xff1a;从外向内&#xff0c;…

root无法运行命令解决办法

今天运行一个命令wget(wg再使用tab键无法使用)&#xff0c;如下提示 -bash: /usr/bin/wget: 权限不够 [rootwww /]# ls -Z /usr/bin/wget-rw-r--r--. root root system_u:object_r:bin_t:s0 /usr/bin/wget发现没有执行权限 chmod x /usr/bin/wget -bash: /usr/bin/wget: …

java类编写sql_用JavaBean编写SQL Server数据库连接类

以下为引用的内容&#xff1a;//类conn.db.conndb.javapackage conn.db;import java.sql.*;public class conndb {Connection conn;ResultSet rs;private int count;public conndb() {try {Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");} catch (Exception ex) {}…

ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path、.Request.MapPath、

1.Request.ApplicationPath->当前应用的目录 Jsp中, ApplicationPath指的是当前的application(应用程序)的目录,ASP.NET中也是这个意思。 对应的--例如我的服务器上有两个web应用域名都是mockte.com 一个映射到目录mockte.com/1/ 另一个影射到 http://mockte.com/2/ …