美文网首页
Mysql Explain详解

Mysql Explain详解

作者: 我是一名搬运工 | 来源:发表于2019-06-23 19:59 被阅读0次

        专门用来做SQL语句的调优的,在select语句前面加一个explain可以把SELECT的执行过程都列出来,包括哪些用了索引,哪些没用索引,哪些查询是全表查询,哪些是索引查询等。

1、Select_type

        Select语句的类型,具体包括如下几种:

        SIMPLE:简单SELECT(不使用UNION或子查询)

        PRIMARY:最外面的SELECT

        UNION:UNION中的第二个或后面的SELECT语句

        DEPENDENT UNION:子查询中的UNION中的第二个或后面的SELECT语句

        UNION RESULT:UNION 的结果

        SUBQUERY:子查询中的第一个SELECT,子查询里没用UNION

            select * from t_order where order_id=(select order_id from t_order where order_id=100); 

        DEPENDENT SUBQUERY:子查询中的第一个SELECT

        DERIVED:导出表的SELECT(FROM子句的子查询)

            select * from (select order_id from t_order where order_id=100) a; 

        下面这条SQL语句,Select_type分别是:Primary\Dependent subquery\Dependent union

        select * from t_order where order_id in (select order_id from t_order where order_id=100 union select order_id from t_order where order_id=200); 

2、Type

        Select语句的联接类型,常用的几种类型如下所示:

        const:

            单表查询:根据主键或唯一索引,查出一条唯一数据记录

            多表联合查询:根据主键或唯一索引,查出一条唯一数据记录

        eq_ref:

            多表联合查询:关联的字段都是各自表的主键。

        ref:

            单表查询:使用唯一索引的前缀索引、或非唯一索引的前缀索引、或非唯一索引的全列索引进行查询。

            多表联合查询:关联的字段不是自己表的主键,是外键。

        range:

            单表查询:使用一个单列索引,或复合索引的前缀索引进行范围查询;

            多表联合查询使用一个单列索引,或复合索引的前缀索引进行范围查询。

        index:

            无Where语句:select后的列都是同一个索引里面的列

            有Where语句:where后面是索引的非前缀索引列

        ALL:

            无Where语句: select后面有不是索引的列

            有Where语句:where后面有不是索引的列

3、Extra

        Using index condition:

            必带where语句,辅助索引扫描加回表

        Using index:

            无where语句:select后只跟主键

            有where语句:select后只跟主键,where后跟主键查询

        Using where;Using index

            必带where语句,且直接从辅助索引获取全部数据,即辅助索引的覆盖扫描

        Using where:

            必带where语句,且where语句用不上索引

        Using filesort

            使用非索引列进行order by 导致的排序,效率偏低,需要优化。

            优化手段包括:

                    修改业务逻辑,不用SQL语句中进行order by

                    使用索引列进行order by

        Using temporary:

            多表关联left join时,on后面使用非直接关联会使用临时表。

            优化手段包括:

                    修改业务逻辑,非直接关联转成直接关联

                    将非直接关联转为子查询

相关文章

  • MySQL Explain 执行计划

    参考:MYSQL explain详解需求:Qunar MySQL基础培训 Explain显示了MySQL如何使用索...

  • EXPLAIN 命令详解

    # MySQL Explain详解 __简介__ 执行计划(`query Execution plan`) __语...

  • MySQL EXPLAIN详解

    MySQL EXPLAIN详解 MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解expl...

  • mysql

    MySQL Explain详解[https://www.cnblogs.com/tufujie/p/9413852...

  • MySQL Explain详解

    MySQL Explain详解[https://www.cnblogs.com/tufujie/p/9413852...

  • mysql explain执行计划详解

    **mysql explain执行计划详解** ![](https://i.imgur.com/rMMKNQN.p...

  • MySQL索引背后的数据结构及算法原理

    参考来源 mysql索引分析 MySQL索引背后的数据结构及算法原理 MySQL中EXPLAIN命令详解 索引连接...

  • mysql explain命令详解

    mysql explain命令详解 一.语法 二.explain输出解释 1.id 我的理解是SQL执行的顺利的标...

  • MySQL explain详解

    explain 一、id 1、单纯join(simple查询)的id都是1,按顺序往下看 2、subquery,s...

  • mysql explain详解

    概念 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,...

网友评论

      本文标题:Mysql Explain详解

      本文链接:https://www.haomeiwen.com/subject/xdkaqctx.html