`
sunzhyng
  • 浏览: 57383 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mysql中explain的说明

    博客分类:
  • DB
阅读更多

mysql> explain select count(id) from t_prehandle_zhigao_05 as zhigao where start_time > '2008-05-30';
+----+-------------+--------+-------+---------------+------------+---------+------+---------+--------------------------+
| id | select_type | table | type | possible_keys | key        | key_len | ref | rows    | Extra                    |
+----+-------------+--------+-------+---------------+------------+---------+------+---------+--------------------------+
| 1 | SIMPLE      | zhigao | range | start_time    | start_time | 8       | NULL | 1061762 | Using where; Using index |
+----+-------------+--------+-------+---------------+------------+---------+------+---------+--------------------------+
1 row in set (0.00 sec)

EXPLAIN列的解释:

    * table:显示这一行的数据是关于哪张表的
    * type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL
    * possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句
    * key:实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句 中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
    * key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好
    * ref:显示索引的哪一列被使用了,如果可能的话,是一个常数
    * rows:MYSQL认为必须检查的用来返回请求数据的行数
    * Extra:关于MYSQL如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢

extra列返回的描述的意义

    * Distinct:一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
    * Not exists: MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了
    * Range checked for each Record(index map:#):没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一
    * Using filesort: 看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行
    * Using index: 列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候
    * Using temporary 看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上
    * Where used 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题不同连接类型的解释(按照效率高低的顺序排序)
    * system 表只有一行:system表。这是const连接类型的特殊情况
    * const:表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待
    * eq_ref:在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用
    * ref:这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好
    * range:这个连接类型使用索引返回一个范围中的行,比如使用>或<查找东西时发生的情况
    * index: 这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)
    * ALL:这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免

分享到:
评论

相关推荐

    MySQL 执行计划说明.md

    《MySQL 执行计划EXPLAIN说明.MD》该文档描述了有关MySQL 执行计划EXPLAIN各项参数说明,还文档基于Typora工具编写。内容是平时积累整理,仅供参考。文档中内容在博客...

    MySQL中文参考手册.chm

    4.9 MIT-pthreads 注意事项 4.10 Perl 安装说明 4.10.1 在Unix操作系统上安装 Perl 4.10.2 在 Win32上安装 ActiveState Perl 4.10.3 在 Win32 上安装 MySQL Perl 分发 4.10.4 使用 ...

    MySQL中通过EXPLAIN如何分析SQL的执行计划详解

    在MySQL中,我们可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序。 下面分别对EXPLAIN命令结果的每一列进行说明: .select_type:表示SELECT的类型,常见...

    MySQL中文参考手册

    + 1.2.1 本手册中使用的约定 o 1.3 MySQL的历史 o 1.4 MySQL的主要特征 o 1.5 MySQL稳定性? o 1.6 顺应2000年 o 1.7 SQL一般信息和教程 o 1.8 有用的MySQL相关链接 * 2 MySQL 邮件列表及如何提问或报告错误...

    mysql总结之explain

    explain主要用于sql语句中的select查询,可以显示的查看该sql语句索引的命中情况,从而更好的利用索引、优化查询效率。  Explain语法如下:explain [extended] select … 其中extended是选用的,如果使用的...

    MYSQL

    4.9 MIT-pthreads 注意事项 4.10 Perl 安装说明 4.10.1 在Unix操作系统上安装 Perl 4.10.2 在 Win32上安装 ActiveState Perl 4.10.3 在 Win32 上安装 MySQL Perl 分发 4.10.4 使用 Perl ...

    mysql_casual_explain:突出显示有问题MySQL解释结果

    Mysql休闲说明 突出显示有问题MySQL解释结果。 受启发。 安装 将此行添加到您的应用程序的Gemfile中: gem 'mysql_casual_explain' 然后执行: $ bundle install 或将其自己安装为: $ gem install mysql_...

    MySQL如何基于Explain关键字优化索引功能

    explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。简单讲,它的作用就是分析查询性能。  explain关键字的使用方法很简单,就是把它放在select查询语句的...

    2017最新老男孩MySQL高级专业DBA实战课程全套【清晰不加密】,看完教程月入40万没毛病

    31-MySQL数据库多实例的其他故障问题说明.avi 第三部:MySQL应用管理及进阶实战操作(29节) 01-MySQL启动与关闭深入知识及原理.avi 02-登录MySQL知识深入讲解.avi 03-学会使用MySQL数据库的帮助.avi 04-修改mysql...

    MySQL性能分析及explain的使用说明

    本文我们主要介绍了MySQL性能分析以及explain的使用,包括:组合索引、慢查询分析、MYISAM和INNODB的锁定、MYSQL的事务配置项等,希望能够对您有所帮助。

    MySQL,通过explain分析低效SQL的执行计划。

    type:MySQL在表中找到所需行的方式,即访问类型。 possible_keys:查询时,可能使用的索引。 key:实际使用的索引。 key_len:使用到索引字段的长度。 rows:扫描行的数量。 Extra:执行情况的说明和描述。  执行...

    10道精选MySQL面试题

    请简述B树和B+树在MySQL数据库索引中的应用,并解释为什么InnoDB存储引擎选择使用B+树作为索引结构? 在什么情况下,查询优化器会选择不使用索引?如何通过EXPLAIN分析SQL语句的执行计划? 描述一下MySQL事务的ACID...

    MySQL5.1性能调优与架构设计.mobi

    如MySQL Schema设计的技巧,Query语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了MySQL数据库中主要存储引擎的锁定机制 ●架构设计篇则主要以设计一个高可用可扩展的分布式企业级...

    MYSQL培训经典教程(共两部分) 1/2

    mysql 的输入行编辑器 54 3.2.4 批处理模式连接 55 3.2.5 总结 56 3.3 有关数据库的操作 56 3.3.1 用SHOW显示已有的数据库 56 3.3.2 用Create Dabase 创建数据库 57 3.3.3 用DROP DATABASE删除...

    PHP和MySQL Web开发第4版pdf以及源码

    12.3.3 用EXPLAIN理解查询操作的工作过程 12.4 数据库的优化 12.4.1 设计优化 12.4.2 权限 12.4.3 表的优化 12.4.4 使用索引 12.4.5 使用默认值 12.4.6 其他技巧 12.5 备份MySQL数据库 12.6 恢复MySQL...

    PHP和MySQL WEB开发(第4版)

    21.4 在MySQL中计算日期 21.5 使用微秒 21.6 使用日历函数 21.7 进一步学习 21.8 下一章 第22章 创建图像 22.1 在PHP中设置图像支持 22.2 理解图像格式 22.2.1 JPEG 22.2.2 PNG 22.2.3 WBMP 22.2.4 GIF 22.3 创建...

    MySQLDBA运维笔记.pdf

    mysql 总结........................................................................................................................................6 1.1 数据库的种类.......................................

    Mysql实验之使用explain分析索引的走向

    说明 此实验只是为了验证实际使用索引的结果,请忽略设计的合理性 准备工作 1、用户表一张,有uid ,user_name,real_name ,eamil等字段,详细见建表语句 2、在user_name字段下增加一个简单索引user_name,在email,...

Global site tag (gtag.js) - Google Analytics