zoukankan      html  css  js  c++  java
  • mysql执行计划常用说明

    MYSQL执行计划顺序原则上是:在所有组中,id值越大,优先级越高,越先执行id如果相同,可以认为是一组,从上往下顺序执行
    做执行计划之前,要了解下表统计信息情况:mysql.innodb_table_stats、innodb_index_stats

    上述执行计划执行顺序 derived2(1)-->FLIGHTS(1)-->NULL(2)
    输出字段说明:
    
    id                            查询的执行顺序号
    select_type                    查询类型,包括:
        SIMPLE                    简单查询(不使用UNION或子查询)
        PRIMARY                    最外层的SELECT语句
        UNION                      在UNION结构中的第二个及以上的SELECT语句
        DEPENDENT UNION            在UNION结构中的第二个及以上的SELECT语句,依赖外层查询
        UNION RESULT              UNION的结果
        SUBQUERY                  子查询中的第一个SELECT语句
        DEPENDENT SUBQUERY        子查询中的第一个SELECT语句,依赖于外层查询
        DERIVED                      子查询中FROM后面的语句
        MATERIALIZED              物化视图子查询
        UNCACHEABLE SUBQUERY    查询结果没有被缓存且需要重新外层查询计算每行数据的子查询
        UNCACHEABLE UNION    UNION 结构中第二个及之后的SELECT语句且没有生成查询缓存
        
    table                          表名
    type                          表连接的类型,包括:
        system                    表中只有一行数据,这是cost连接类型的一种特殊情况
        const                      表中只有一行匹配记录,且在查询中被最先读取
        eq_ref                    和之前的表作nested loop连接时,每次两个表中连接字段相比,都有一行匹配的记录。当索引中的所有部分被用于连接且索引是主键索引或UNIQUE非空索引时,会使用这种类型。
        ref                        每次和之前的表做连接时,读取所有符合条件的索引值。如果连接使用索引的最左边前缀字段,或者索引不是主键或UNIQUE索引,会用到这种连接方式,也就是说如果连接不能基于每个符合连接条件的索引值选择出单独的一行,则会使用这种连接方式。
        fulltext                  使用FULLTEXT索引来建立连接
        ref_or_null                连接类型类似ref,除此之外,MySQL会额外扫描出包含NULL值的行。这种连接方式通常用于有子查询的情形下。
        index_merge                使用索引合并的连接方式。在这种情况下,key字段会包含使用的索引,key_len包含使用索引的最长索引部分。
        unique_subquery              这种连接方式在某种情况下会代替eq_ref,如value IN (SELECT primary_key FROM single_table WHERE some_expr),这种方式使用索引查询功能代替子查询,以获得更好的执行效率。
        index_subquery              这种连接方式类似unique_subquery。它会代替IN子查询,但是它适用于非unique索引的子查询,如value IN (SELECT key_column FROM single_table WHERE some_expr)
        range                      使用索引扫描出指定范围的行。key字段指示使用的索引。key_len指示索引的最大长度。ref字段会显示NULL
        index                      这种索引连接类型和ALL相同,除了索引树被扫描到。这会出现在两种情况下:一、如果该索引是一个覆盖索引查询,且只扫描出索引树。在这种情况下,Extra字段会显示Using index。二、通过索引顺序来执行全表扫描。
        ALL                        和之前表做连接时,每次两表关联时都做全表扫描。
        
    possible_keys                  可供选择的索引
    key                            实际选择的索引
    key_len                          选择的索引长度
    ref                            显示和索引相比较的字段或常量,如果这个字段的值是func,这个值会用在函数的结果中。
    rows                          估计的表的行数
    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,这就会发生,或者是查询有问题。

     

  • 相关阅读:
    jmeter如何操作数据库
    jmeter压力测试
    cmd中用ping命令时,提示ping命令不是外部或内部命令问题
    scrapy post Request payload类型值
    scrapy-deltafetch实现增量爬取
    django虚拟环境搭建笔记
    python Image模块基本语法
    登录北京住房公积金,使用已注册过账号
    登录北京社保网站
    python通过pop3方式登录邮箱(qq,新浪,网易)
  • 原文地址:https://www.cnblogs.com/monkeybron/p/9755258.html
Copyright © 2011-2022 走看看