美文网首页
MySql 使用explain分析SQL

MySql 使用explain分析SQL

作者: zshanjun | 来源:发表于2017-03-13 18:07 被阅读64次

    使用explain查询SQL的执行计划

    示例:

    explain select * from `discussions` where `title` like '%hh%' or `text` like '%hh%' or `catagory_id` in (select `id` from `catagories` where `name` like '%hh%') order by `created_at` desc limit 10 \G
    *************************** 1. row ***************************
               id: 1
      select_type: PRIMARY
            table: discussions
             type: ALL
    possible_keys: NULL
              key: NULL
          key_len: NULL
              ref: NULL
             rows: 86
            Extra: Using where; Using filesort
    *************************** 2. row ***************************
               id: 2
      select_type: DEPENDENT SUBQUERY
            table: catagories
             type: unique_subquery
    possible_keys: PRIMARY
              key: PRIMARY
          key_len: 4
              ref: func
             rows: 1
            Extra: Using where
    2 rows in set (0.00 sec)
    
    
    
    

    explain返回各列的含义:

    table:显示这一行的数据时关于哪张表的

    type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL
    (const一般是主键或唯一索引,eq_reg一般是主键和唯一索引的范围查找,ref常见于联结查询即一个表是基于另一个索引的查找,range基于索引的范围查找,index对于索引的扫描,ALL表扫描)

    possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。

    key:实际使用的索引。如果为NULL,则没有使用索引。

    key_len:使用的索引的长度,在不损失精确性的情况下,长度越短越好

    ref:显示索引的哪一列被使用了,如果可能的话,是一个常数

    rows:MySQL认为必须检查的用来返回请求数据的行数

    extra列需要主要的返回值:
    Using filesort:当看到这个的时候,查询就需要优化了。MySQL需要进行额外的步骤来发现如何对返回的行排序。它根据联结类型以及存储键值和匹配条件的全部行的行指针来排序全部行
    Using temporary:当看到这个的时候,查询需要优化了。这里,MySQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行order by上,而不是group by上


    参考网站:

    相关文章

      网友评论

          本文标题:MySql 使用explain分析SQL

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