zoukankan      html  css  js  c++  java
  • mysql执行计划

    什么是Mysql执行计划

    执行计划是Mysql如何执行一条sql语句,包括sql查询顺序、是否使用索引、索引信息、查询命中率等信息。
    基本语法

    explain select ...
    

    InnoDb引擎的执行计划内容

    id:由一组数字组成,表示一个查询中各个子查询的执行顺序;

    id相同执行顺序由上之下
    id不同,id值越大优先级越高,越先被执行
    id为null时表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中

    selectType:表示查询中每个select字句的类型

    SIMPLE:表示此查询不包含union查询或子查询
    PRIMARY:表示此查询是最外层的查询(包含子查询)
    SUBQUERY:子查询中的第一个select
    UNION:表示此查询时union的第二或随后的查询
    ....

    table: 表示该语句查询的表

    type:优化sql的重要字段,也是我们判断sql性能和优化程度重要指标。他的取值范围:

    1、const:通过索引一次命中,匹配一行数据
    2、system:表中只有一行记录,相当于系统表
    3、eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配
    4、ref:非唯一性索引扫描,返回匹配某个值的所有
    5、range:指检索给定范围的行,使用一个索引来选择行,一般用于between、<、>
    6、index:指遍历索引树
    7、all:表示全表扫描。
    执行效率:all<index<range<ref<eq_ref<const<system

    possible_keys:可能使用的索引,不一定使用。查询涉及到的字段上若存在索引,则该索引将被列出来。

    key:显示mysql查询中实际使用的索引,若没有使用索引,结果为null

    key_len :索引长度

    ref:命中索引字段名,走常量打印const

    rows:mysql查询查询优化器根据统计信息估算该sql返回结果集需要扫描读取的行数,这个值相当重要,索引优化之后,扫描读取的行数越多,说明索引设置不对,或者字段传入的类型之类的问题,说明需要进行优化

    filtered:返回结果的行数占需要读取的行(rows)的百分比,百分比越高,说明需要查询到数据越准确。

    extra

    1、using filesort:表示mysql对结果集进行外部排序,不能通过索引顺序达到排序效果。一般有using_filesort都建议优化去掉,因为这样的查询cpu资源消耗大,延时长。
    2、using index:覆盖索引扫描,表示查询在索引树中就可查找到所需数据,不用扫描表数据文件,往往说明性能不错
    3、using temporary:查询有使用临时表,一般出现于排序,分组和多表join的情况,查询效率不高,建议优化。
    4、using where:sql使用了where过滤,效率较高。

  • 相关阅读:
    题解-CmdOI2019 口头禅
    题解-NOI2003 智破连环阵
    题解-CF1282E The Cake Is a Lie
    CF1288F Red-Blue Graph
    题解-洛谷P4229 某位歌姬的故事
    莫比乌斯反演
    [HNOI2008]越狱(bzoj1008)(组合数学+正难则反)
    [FJOI2007]轮状病毒(bzoj1002)(递推+高精度)
    矩阵快速幂
    高斯消元
  • 原文地址:https://www.cnblogs.com/liuzhidao/p/14803152.html
Copyright © 2011-2022 走看看