EXPLAIN 干了点什么

第一列id, 代表序号, id越大 越先执行 id如果相等 则从上往下执行

第二列select_type, 代表 查询的类型

第三列table 查的哪张表

第四列type: 关联类型/表示类型 system>const>eq_ref>ref>range>index>ALL  一般来说 得保证查询达到range,最好ref

    system->查的那个表 就只有一行

    const-> 查出来的记录只有一行 

    eq_ref->唯一/主键索引 被关联使用的时候 最多只返回一条符合的记录

    ref->唯一索引的部分/普通索引 索引要和某个值比较 可能找到多行数据

    range->范围扫描 使用一个索引来检索行

    index->查询全表索引

    ALL->全表扫描

第五列possible key 可能用到的索引

第六列key 用到的索引列

第七列key_length mysql在索引中使用的字节数,通过这个值可以具体算出其使用了哪个索引

第八列ref 在key列记录的索引中 表查找值使用的列名或者常量

第九列rows mysql估计要读取的行数

第十列Extra

    Using Index:查询的列被索引覆盖(即覆盖索引),且where筛选列是索引的前导列

    Using Where Using Index: 查询的列 被索引覆盖,但where筛选条件是索引列之一 但不是前导列 => 无法直接通过索引找到想要的数据

    Using Where: 查询的列未被索引覆盖,where筛选的列非索引前导列

    NULL: 用到了索引 但是 查询的部分字段没有被索引覆盖 需要 "回表"实现

    Using temporary: MySQL需要创建一张临时表来处理查询

    Using filesort:Mysql会对结果 使用一个外部索引排序

 

 ps~~~小甜点----一个特殊玩法:    

        explain extended SELECT fraction FROM risk_test_question WHERE uid = 1;
        show WARNINGS;

           explain extended会提供一些扩展的玩法, show warnings会写出来MySQL优化引擎优化后的语句(虽然大多数情况没什么用)

posted @ 2021-09-28 11:42  却道。此心安处是吾乡  阅读(33)  评论(0)    收藏  举报