MySQL查询分析器EXPLAIN或DESC
转载:http://chenzehe.iteye.com/blog/1682081
MySQL可以通过EXPLAIN或DESC来查看并分析SQL语句的执行情况,如下需要计算2006年所有公司的销售额,需要关联sales表和company表,并且对money字段做求和操作,相应SQL如下:
- EXPLAIN SELECT SUM(money) FROM sales s,company c WHERE s.company_id=c.id AND s.year=2006 \G;
- *************************** 1. row ***************************
- id: 1
- select_type: SIMPLE
- table: s
- type: ALL
- possible_keys: NULL
- key: NULL
- key_len: NULL
- ref: NULL
- rows: 1000
- Extra: Using where
- *************************** 2. row ***************************
- id: 1
- select_type: SIMPLE
- table: c
- type: ref
- possible_keys: index_company_id
- key: index_company_id
- key_len: 5
- ref: sakila.c.company_id
- rows: 1
- Extra: Using where; Using index
列的说明:
select_type: 表示SELECT的类型,常见的有下面几种
SIMPLE: 简单表,不使用连接或子查询的
PRIMARY: 主查询,即外层的查询
UNION: UNION中的第二个或者后面的查询语句
SUBQUERY: 子查询中的第一个SELECT
table: 输出结果集的表
type: 表示表的连接类型,性能由好到差的连接类型为下面顺序
system: 表中只有一行,即常量表
const: 单表中最多有一个匹配行,如primary key或unique index
eq_ref: 对于前面的每一行,在此表中只查询一条记录,也就是多表连接中使用primary key或unique index
ref: 与eq_ref类似,区别在于不是使用primary key或unique index,而是使用普通索引
ref_or_null: 与ref类型,区别在于条件中包含对null的查询
index_merge: 索引合并优化
unique_subquery: in的后面是一个查询主键字段的子查询
index_subquery: 与unique_subquery类似,区别在于in的后面是查询非唯一索引字段的子查询
range: 单表中的范围查询
index: 对于前面的每一行,都通过查询索引来得到数据
all: 对于前面的每一行,都通过扫描全表来得到数据
possible_keys: 查询时可能用到的索引
key: 查询时实际使用到的索引
key-len: 索引字段的长度
rows: 扫描行的数量
Extra: 执行情况的说明和描述
通过EXPLAIN的分析,确认在上面的例子中是对sales表的全表扫描导致效率不理想,通过对sales表创建索引:
- CREATE INDEX index_sales_year ON sales(year);
创建索引后,再对该查询语句分析如下:
- EXPLAIN SELECT SUM(money) FROM sales s,company c WHERE s.company_id=c.id AND s.year=2006 \G;
- *************************** 1. row ***************************
- id: 1
- select_type: SIMPLE
- table: s
- type: ref
- possible_keys: index_seles_year
- key: index_sales_year
- key_len: 2
- ref: const
- rows: 1
- Extra: Using where
- *************************** 2. row ***************************
- id: 1
- select_type: SIMPLE
- table: c
- type: ref
- possible_keys: index_company_id
- key: index_company_id
- key_len: 5
- ref: sakila.c.company_id
- rows: 1
- Extra: Using where; Using index
MySQL查询分析器EXPLAIN或DESC的更多相关文章
- Mysql中的explain和desc
查询分析器 desc 和 explain 作用基本一样,explain速度快一点 explain 一条SQL语句出出现以下参数, 其中id,select_type,table 用于定位查询,表示本行参 ...
- 如何看MySql执行计划explain(或desc)
简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.EXPLAIN 命令用法十分简单, 在 S ...
- mysql查询语句分析 explain/desc用法
explain或desc显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. explain 数据表 或 desc 数据表 显示数据表各字段含义 ...
- MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介
网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...
- mysqldumpslow 分析slow query日志和explain分析mysql查询结构
mysqldumpslow的使用:比如我们要查询按时间返回前5条日志信息,格式如下:mysqldumpslow -s t -t 5 /var/log/mysql/slowquery_20180303. ...
- MySQL查询优化之explain的深入解析
在分析查询性能时,考虑EXPLAIN关键字同样很管用.EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作.以及MySQL成功返回结果集需要执行的行数.expla ...
- MySQL执行计划 EXPLAIN参数
MySQL执行计划参数详解 转http://www.jianshu.com/p/7134286b3a09 MySQL数据库中,在SELECT查询语句前边加上“EXPLAIN”或者“DESC”关键字,即 ...
- MySQL查询性能优化---高性能(二)
转载地址:https://segmentfault.com/a/1190000011330649 避免向数据库请求不需要的数据 在访问数据库时,应该只请求需要的行和列.请求多余的行和列会消耗MySql ...
- MySQL 优化之 EXPLAIN 关键字
MySQL查询优化之explain的深入解析 0. 准备 首先执行如下的 sql 语句: CREATE TABLE IF NOT EXISTS `article` (`id` int(10) unsi ...
随机推荐
- CSS盒子模型元素实际宽度的计算
一旦为页面设置了恰当的 DTD,大多数浏览器都会按照上面的图示来呈现内容.然而 IE 5 和 6 的呈现却是不正确的.根据 W3C 的规范,元素内容占据的空间是由 width 属性设置的,而内容周围的 ...
- Python各式装饰器
Python装饰器,分两部分,一是装饰器本身的定义,一是被装饰器对象的定义. 一.函数式装饰器:装饰器本身是一个函数. 1.装饰函数:被装饰对象是一个函数 [1]装饰器无参数: a.被装饰对象无参数: ...
- 浅谈UI设计中妙用无穷的深色系背景
英文:medium 译者:优设网 - 陈子木 链接:http://www.uisdc.com/ui-benefits-of-dark-background# --------------------- ...
- MATLAB绘图
matlab绘制散点图 clc,clear x=[11.9,11.5,14.5,15.2,15.9,16.3,14.6,12.9,15.8,14.1]; y=[196.84,196.84,197.14 ...
- jsonp 使用总结
首先:jsonp是json用来跨域的一个东西. 原理是通过script标签的跨域特性来绕过同源策略. 发送端: $.ajax({ type : "post", url : &quo ...
- django 同步数据库
http://www.jianshu.com/p/dbc4193b4f95 博主教程讲解比较详细,可做参考使用.
- robots.txt文件没错,为何总提示封禁
大家好,我的robots.txt文件没错,为何百度总提示封禁,哪位高人帮我看看原因,在此谢过. 我的站点www.haokda.com,robots.txt如下: ## robots.txt for P ...
- sqoop1.4.6+hadoop2.6.0 转载
转载地址:http://blog.csdn.net/zhangzhaokun/article/details/44313531 (1)安装环境 操作系统:Linux(centos6.5 ...
- 接口测试之HTTP协议详解
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- django关系对象映射(Object Relational Mapping,简称ORM)
Model 创建数据库,设计表结构和字段 django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表 from django.db import models clas ...