mysql explain工具使用
explain工具可以确认执行计划是否良好,查询是否走了合理的索引。查询的执行计划,随着数据的变化也可能会有变化。调用方式:explain + [sql语句]。
另外,explain是有局限性的:
1. 不会说明触发器、存储过程、自定义函数对查询的影响情况;
2. 不考虑各种Cache情况;
3. 不能显示执行查询时所做的优化工作;
4. 部分信息是估算的,并非精确值;
5. mysql 5.6之前,只能解释select操作,其他操作需要重写为select之才查看执行计划。
6. 如果from里有子查询,explain可能会执行这个子查询。所以,如果有耗资源很大的子查询,使用explain会产生很大的开销。
各列字段的解释,如下:
1. id,一组数字,操作顺序,如果id相同,则执行顺序由上至下。如果是子查询,id的序号会递增,值越大则优先级越高,越先被执行。
2. select_type,表示每个子句的类型,简单还是复杂,取值有如下几种:
a) simple:简单查询,无子查询或union等;
b) primary:查询中若包含任何复杂的子部分,最外层则被标记为primary;
c) subquery:在select或where中若包含子查询,则该子查询被标记为subquery;
d) derived:from中包含子查询,被标记为derived;
e) union:若select出现在union之后,则被标记为union;
f) union result:从union表中获取结果的select将被标记为union result;
3. type,找到所需行的方式,又称访问类型,取值有如下几种,由最差到最好:
a) all:全表扫描。
b) index:遍历索引,全索引扫描。
c) range:索引范围扫描。
d) ref:非唯一性索引扫描,交返回匹配单独值的所有行,常见于使用非唯一性索引或唯一性索引的非唯一前缀进行的查找。
e) eq_ref:唯一性索引扫描。
f) const、system:当mysql对查询的某部分进行优化,并转换为一个常量时。如将主键置于where列表中,mysql就能将该查询转换为一个常量。system是const的特例,当查询的表只有一行的情况下,即可使用system。
4. possible_keys: 指出mysql能使用哪个索引在表中找到行,查询涉及的字段上若存在索引,则该索引将被列出,但不一定会被查询使用到。
5. key:使用到了哪个索引,这里列出的是实际使用到的索引,若没有使用索引,则显示为null。
6. ref:连接匹配条件,即哪些列或常量用于查找索引上的值。
7. rows:找到所需记录,需要读取的行数,越少越好。
8. Extra:不适合在其他列显示,但却十分重要的信息,常见的有如下值:
a) Using index:使用了覆盖索引。
b) Using where:where条件未使用索引。
c) Using temporary:需要使用临时表来存储结果集,常见于排序和分组查询。性能差。
d) Using filesoft:使用了文件排序,性能差。
mysql explain工具使用的更多相关文章
- MySQL分析工具explain介绍
EXPLAIN是MySQl必不可少的一个分析工具,主要用来测试sql语句的性能及对sql语句的优化,或者说模拟优化器执行SQL语句. 简单的说是execute plan, 获取MySQL数据库的执行计 ...
- 一文学会MySQL的explain工具
开篇说明 (1) 本文将细致介绍MySQL的explain工具,是下一篇<一文读懂MySQL的索引机制及查询优化>的准备篇. (2) 本文主要基于MySQL5.7版本(https://de ...
- explain之三:MYSQL EXPLAIN语句的extended 选项学习体会,分析诊断工具之二
MySQL 的explain命令有一个extended选项,我想可以很多人都没有注意,因为它对命令的输出结果没有任何改变,只是增加了一个warning.这个 warning中显示了MySQL对SQL的 ...
- 网站优化—mysql explain执行计划
explain执行计划 简介MySQL调优: 先发现问题(慢查询,profile) 对于使用索引和没有使用索引,了解到索引可以快速去查找数据 了解什么是索引(索引是排好序的快速查找的数据结构) 索引的 ...
- 【转载】 mysql explain用法
转载链接: mysql explain用法 官网说明: http://dev.mysql.com/doc/refman/5.7/en/explain-output.html 参数: htt ...
- Mysql Explain 详解(转)
原文:http://www.cnitblog.com/aliyiyi08/archive/2008/09/09/48878.html 一.语法 explain < table_name > ...
- MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)
MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...
- 15款最佳的MySQL管理工具和应用程序
工欲善其事,必先利其器.几乎每个开发人员都有最钟爱的 MySQL 管理工具,它帮助开发人员在许多方面支持包括 PostgreSQL,MySQL,SQLite,Redis,MongoDB 等在内的多种数 ...
- MySQL客户端工具 SQLyog
我最喜欢它的History功能,把执行过的操作对应语句都输出出来,一些麻烦的语句用GUI操作后,还能保存对应的sql语句.不错! 官网:http://www.webyog.com 下面是官方的介绍:S ...
随机推荐
- [GO]给导入包起别名
package main import io "fmt" //引用fmt这个包时,名字重命名为io import _ "os" //引用os这个包,但是不调用, ...
- jsp-MySQL连接池
1.将数据库驱动程序的JAR文件放在Tomcat的 common/lib 中: mysql-connector-java-5.1.18-bin.jar 下载地址:https://yunpan.cn/c ...
- Head First Python之2函数模块
模块就是一个包含Python代码的文本文件,以.py结尾. 第三方模块都在PyPI(python package index)上,可使用PyPI发布你的模块,供他人使用. 注释代码 # coding= ...
- 献上一款漂亮的手写PHP验证码
献上一款漂亮的PHP验证码,可以根据个人需求作调整,代码如下(审美观不同,欢迎吐槽): <?php /** * Author: xiongwei * Email: 695704253@qq.co ...
- 使用java实现单链表----(java中的引用就是指针)
//一直以为java中没有指针,其实java的引用就是指针,只不过堆栈中的引用储存了在堆中的地址,可以看做java中的指针.public class sibgleLink<E> { // ...
- access denied for user 'root'@'localhost'
编辑mysql配置文件my.ini(在mysql的安装目录下,我的在D:\Program Files\MySQL\MySQL Server 5.0\my.ini),在[mysqld]这个条目下加入 s ...
- .properties文件的使用
在很多项目中我们都会使用到.properties文件对我们的项目进行配置,今天就介绍一下.properties文件在项目中的使用: 如下图,我们项目中有一个名为project.properties的p ...
- NSStream文件流
1.文件流的使用 NSString *filePath = @"/Users/JHQ0228/Desktop/test.txt"; NSData *data = [@"h ...
- 20165219 2017-2018-2《Java程序设计》课程总结
20165219 2017-2018-2<Java程序设计>课程总结 一.每周作业链接汇总 20165219 我期望的师生关系 20165219学习基础与C语言基础调查 20165219 ...
- Java 中的main方法
public static void main(String args[]) public:表示此方法可以被外部所调用. static:表示此方法可以由类名称直接调用. void:主方法是程序的起点, ...