转载:http://chenzehe.iteye.com/blog/1682081

MySQL可以通过EXPLAIN或DESC来查看并分析SQL语句的执行情况,如下需要计算2006年所有公司的销售额,需要关联sales表和company表,并且对money字段做求和操作,相应SQL如下:

Sql代码  
  1. EXPLAIN SELECT SUM(money) FROM sales s,company c WHERE s.company_id=c.id AND s.year=2006 \G;
  2. *************************** 1. row ***************************
  3. id: 1
  4. select_type: SIMPLE
  5. table: s
  6. type: ALL
  7. possible_keys: NULL
  8. key: NULL
  9. key_len: NULL
  10. ref: NULL
  11. rows: 1000
  12. Extra: Using where
  13. *************************** 2. row ***************************
  14. id: 1
  15. select_type: SIMPLE
  16. table: c
  17. type: ref
  18. possible_keys: index_company_id
  19. key: index_company_id
  20. key_len: 5
  21. ref: sakila.c.company_id
  22. rows: 1
  23. 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表创建索引:

Sql代码  
  1. CREATE INDEX index_sales_year ON sales(year);

创建索引后,再对该查询语句分析如下:

Sql代码  
  1. EXPLAIN SELECT SUM(money) FROM sales s,company c WHERE s.company_id=c.id AND s.year=2006 \G;
  2. *************************** 1. row ***************************
  3. id: 1
  4. select_type: SIMPLE
  5. table: s
  6. type: ref
  7. possible_keys: index_seles_year
  8. key: index_sales_year
  9. key_len: 2
  10. ref: const
  11. rows: 1
  12. Extra: Using where
  13. *************************** 2. row ***************************
  14. id: 1
  15. select_type: SIMPLE
  16. table: c
  17. type: ref
  18. possible_keys: index_company_id
  19. key: index_company_id
  20. key_len: 5
  21. ref: sakila.c.company_id
  22. rows: 1
  23. Extra: Using where; Using index

MySQL查询分析器EXPLAIN或DESC的更多相关文章

  1. Mysql中的explain和desc

    查询分析器 desc 和 explain 作用基本一样,explain速度快一点 explain 一条SQL语句出出现以下参数, 其中id,select_type,table 用于定位查询,表示本行参 ...

  2. 如何看MySql执行计划explain(或desc)

    简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.EXPLAIN 命令用法十分简单, 在 S ...

  3. mysql查询语句分析 explain/desc用法

    explain或desc显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. explain 数据表 或 desc 数据表 显示数据表各字段含义 ...

  4. MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介

    网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...

  5. mysqldumpslow 分析slow query日志和explain分析mysql查询结构

    mysqldumpslow的使用:比如我们要查询按时间返回前5条日志信息,格式如下:mysqldumpslow -s t -t 5 /var/log/mysql/slowquery_20180303. ...

  6. MySQL查询优化之explain的深入解析

    在分析查询性能时,考虑EXPLAIN关键字同样很管用.EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作.以及MySQL成功返回结果集需要执行的行数.expla ...

  7. MySQL执行计划 EXPLAIN参数

    MySQL执行计划参数详解 转http://www.jianshu.com/p/7134286b3a09 MySQL数据库中,在SELECT查询语句前边加上“EXPLAIN”或者“DESC”关键字,即 ...

  8. MySQL查询性能优化---高性能(二)

    转载地址:https://segmentfault.com/a/1190000011330649 避免向数据库请求不需要的数据 在访问数据库时,应该只请求需要的行和列.请求多余的行和列会消耗MySql ...

  9. MySQL 优化之 EXPLAIN 关键字

    MySQL查询优化之explain的深入解析 0. 准备 首先执行如下的 sql 语句: CREATE TABLE IF NOT EXISTS `article` (`id` int(10) unsi ...

随机推荐

  1. 计算ScrollView的当前页面

    //每页宽度 CGFloat pageWidth = sender.frame.size.width; //根据当前的坐标与页宽计算当前页码 int currentPage = floor((send ...

  2. C# WinForm开发系列 - DataGridView

    1.DataGridView实现课程表 testcontrol.rar 2.DataGridView二维表头及单元格合并 DataGridView单元格合并和二维表头.rar myMultiColHe ...

  3. 【转】lower_case_table_names=1 让MySQL不区分大小写

    lower_case_table_names=1 让MySQL不区分大小写! 此前有款网络游戏的数据库是采用MySQL.操作系统是CentOS.部分服务器的操作系统又是Windows. 出现了一个小毛 ...

  4. 手机sdk 开发

    题记:很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360......据统计国内市场当前不下于100家渠道,还包括一些没有SDK的小渠道.每个渠道SDK接入的方法呢, ...

  5. mybatis,Spring等工具对xml文件正确性的验证

    我们知道mybatis或者spring都是使用xml文件作为配置文件,配置文件的格式都是定义在叫做.dtd或者.xsd文件中的,当工具在解析用户自己定义的xml文件的时候,如何才能知道用户自定义的文件 ...

  6. eclipse构建maven+scala+spark工程 转载

    转载地址:http://jingpin.jikexueyuan.com/article/47043.html 本文先叙述如何配置eclipse中maven+scala的开发环境,之后,叙述如何实现sp ...

  7. python :表单验证--对每一个输入框进行验证

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  8. session详解

    什么是Session 对Tomcat而言,Session是一块在服务器开辟的内存空间,其存储结构为ConcurrentHashMap: Session的目的 Http协议是一种无状态协议,即每次服务端 ...

  9. ng-strict-di

    关于AngularJS中的ng-strict-di: 首先我们要知道"注入"的概念: 在Angular中,如果想使用模块中的内容,只需要提供它的名称即可,不需自己查找.创建.初始化 ...

  10. Father Christmas flymouse--POJ3160Tarjan

    Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Description After retirement as c ...