十6、Mysql之Explain执行计划

1、 如何查看mysql执行计划?
  示例:explain SELECT * FROM tableName;
  执行结果以下: mysql


参数说明:
  一、id:SELECT的查询序列号:
  二、select_type:select的类型,有如下几种形式:
    SIMPLE:简单SELECT(不使用UNION或子查询等)
    PRIMARY:最外面的SELECT:
    UNION:UNION中的第二个或后面的SELECT语句
    DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询
    UNION RESULT:UNION的结果。
    SUBQUERY:子查询中的第一个SELECT
    DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询
    DERIVED:导出表的SELECT(FROM子句的子查询)
  三、table:表名
  四、type:链接使用了哪一种类别,有无使用索引,type分类以下:
    system:表只有一行;
    const:表最多只有一行匹配,通用用于主键或者惟一索引比较时;
    eq_ref:惟一性索引扫描,对于每一个索引键,表中只有一条记录与之匹配,常见于主键或惟一索引扫描
    ref:非惟一性索引扫描,返回匹配某个单独值得全部行;
    fulltext:全文搜索
    ref_or_null:与ref相似,但包括NULL;
    index_merge:索引合并优化,但不包括跨表和全文索引;
    unique_subquery:用于where中的in形式子查询,子查询返回不重复值惟一值;
    index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值;
    range:只检索给定范围的行;
    index:读全表,index只遍历索引树;
    ALL:表示全表扫描。
    性能由好到坏排序:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL;
  五、possible_keys:显示可能应用在表中的索引,possible_keys的值一个或多个
  六、key:实际使用到的索引;
  七、key_len:索引中使用到的字节数,长度越短越好;
  八、ref:显示索引的哪一列被使用了;九、rows:根据表统计信息及索引选用状况,找到所须要读取的行数;
  九、filtered:返回结果的行占须要读到的行(rows列的值)的百分比;
  十、Extra:包含不适合在其它列中显示但十分重要的额外信息。

2、执行计划的限制
  一、没法展现存储过程,触发器,UDF对查询的影响
  二、没法使用EXPLAIN对存储过程进行分析sql

相关文章
相关标签/搜索