`
sunzhyng
  • 浏览: 59359 次
  • 性别: 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 Explain

    ### MySQL Explain 深度解析 #### 一、Explain 的意义 在数据库查询优化领域,`EXPLAIN` 是一个非常强大的工具,它能够帮助我们分析 `SELECT` 语句的执行过程,揭示出查询效率低下的原因。通过 `EXPLAIN` 的分析...

    mysql explain详解1

    如果`Extra`中出现`Using filesort`,说明MySQL可能需要额外步骤来排序结果,这也是一种性能瓶颈。 总之,MySQL的EXPLAIN工具是优化SQL查询性能的关键,通过分析其输出,我们可以找出查询的瓶颈,优化索引策略,...

    Mysql Explain 语法详细解析

    为了更好地理解 EXPLAIN 的使用方法,下面我们通过一个具体的例子来进行说明: 假设有一个名为 `employees` 的表,结构如下: ``` CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR...

    Mysql Explain 详细介绍

    MySQL的EXPLAIN命令是数据库管理员和开发者用于优化SQL查询性能的重要工具。它提供了一种查看MySQL如何执行SELECT语句的方法,帮助我们理解查询计划、索引使用情况以及潜在的性能瓶颈。下面是对MySQL EXPLAIN的详细...

    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 Query Browser 图文说明

    确保在安装过程中配置好MySQL服务器的相关信息。 - 启动程序后,需要连接到MySQL服务器。输入服务器地址、端口、用户名和密码,点击连接即可。 2. **数据库连接管理** - 在“连接”菜单中,你可以创建、编辑或...

    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 邮件列表及如何提问或报告错误...

    SQL优化和SQL执行分析工具Explain的使用详解和示例

    在这个例子中,`id`列的值分别是1、2,说明`t1`先执行,然后`t`再执行。 2. **select_type**: - 描述查询的类型。主要有以下几种: - `SIMPLE`: 不包含子查询或联合查询的简单查询。 - `PRIMARY`: 包含子查询时...

    mysql中文帮助文档

    文档会详细说明如何创建和管理索引,以及如何利用EXPLAIN命令来分析查询执行计划,从而优化查询性能。 4. **事务处理与并发控制**:MySQL 5.1支持ACID(原子性、一致性、隔离性和持久性)属性的事务处理,这对于...

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

    EXPLAIN关键字在MySQL中扮演着重要角色,它允许我们理解SQL查询的执行过程,识别潜在的性能瓶颈,并据此进行优化。 当我们使用EXPLAIN分析SELECT查询时,它会展示出查询计划,包括每个表的访问方式、使用的索引以及...

    mysql5.0中文使用手册

    MySQL 5.0 是一款广泛使用的开源关系型数据库管理系统,其功能强大且易于学习,尤其适合初学者和中小型项目。这份“mysql5.0中文使用手册”为那些对英文文档不熟悉的用户提供了一条便捷的学习路径,它涵盖了MySQL ...

    explain的用法

    在MySQL中,`explain`是用来预览查询执行计划的命令。当我们想要查看SQL语句是如何执行的,特别是当面临查询性能问题时,`explain`就显得尤为关键。它的基本用法是在SELECT语句之前加上`explain`关键字,例如: ```...

    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 5.1中文参考手册(CHM)

    总之,这份MySQL 5.1中文参考手册是学习和工作中的得力助手,无论你是数据库管理员、开发者还是数据分析者,都能从中获取丰富的知识和实践经验。通过深入学习和实践手册中的内容,你将能够熟练掌握MySQL 5.1的使用,...

    简述Mysql Explain 命令

    总之,MySQL的EXPLAIN命令是性能优化的关键工具,通过理解其输出,我们可以找出查询中的瓶颈并采取相应措施提高查询效率。对于那些返回结果缓慢的页面,务必使用EXPLAIN进行分析,以确保SQL语句的高效运行。同时,...

    MySQL Explain使用详解

    - 如果`Extra`中出现“Using filesort”,说明MySQL需要额外步骤排序结果,这也可能导致性能下降。 以一个例子说明:假设我们要查找名字为'Jefabc'的员工,原始SQL是`SELECT * FROM emp WHERE name = 'Jefabc'`。当...

Global site tag (gtag.js) - Google Analytics