mysql explain 关键词分析mysql 语句

传统文化丢失严重啊,古代女子个个能呤诗作对,现代女子不行了 只会作对。

 

很多时间,在优化mysql 语句的时候,首先必须用到 关键字  explain 进行分析一下

例如:

EXPLAIN select * from pdvee_finance_order_cost WHERE subject_id = 1;

执行结果:

 

 

现在就让我们来一个个的分析,这些代表着什么意思

 

id 列

  这是一个查询编号,编号越大表示该行数据优先执行,如果编号一样,则会从上往下依次执行(数据量少的优先先执行,mysql 内部机制)

 

select_type列

  1. SIMPLE(简单查询)
  2. PRIMARY(主查询)、SUBQUERY(子查询)
  3. DERIVED(派生查询)
  4. UNION(联合查询)、UNION RESULT(联合结果的查询)
  5. DEPENDENT SUBQUERY(依赖性子查询)
  6. UNCACHEABLE UNION(未被缓存的查询)
  7. DEPENDENT UNION(依赖性联合查询)

 

table列

  查询的表

 

partitions列

  表示分区

 

type列

  查询SQL性能的核心,它显示了该SQL语句使用了哪种方式进行查询,粗略的来说,一共有7种,性能从好到差依次是: system、const、eq_ref、ref、range、index、all

  1. system 当表中只有一条数据,这种情况基本达不到,只是理想的情况。它是const类型的一个特例
  2. const 从表中通过常量且只查询出一条数据,并且这条数据是通过主键索引或者唯一索引来查询出来的
  3. eq_ref 唯一性索引,对于要查询的字段,只返回匹配唯一的一行数据,有且只能有一个(不能多个,也不能为0),经常出现在唯一索引和主键索引上
  4. ref 非唯一性索引,对于索引的查询,可以返回0个或多个
  5. range 执行索引查询的范围,使用between、>、<、in。需要注意的是,如果in后面的数据太多,使用in的话索引会失效,然后变成全表扫描,并且使用数字查询的时候一定要确保索引列的类型为int
  6. index 使用index表示从当前索引树(B+树)来进行查询,比全表扫描要好一些
  7. All 表示全表扫描,将表中的每一列都查了一遍,没有使用到索引,效率最低

 

possible_keys列

  可能用的到索引,这一列显示理论上应该可能用到的索引有哪些,这个数量最好和select 后面查询的字段数量是一致的。如果使用了索引,但是没有出现在该列中,则说明该SQL使用的是覆盖索引。如果为null,表示没有用到索引。

 

key列

  实际用到的索引

 

key_len列

  所用的索引长度,也可以说是字节数, 在使用索引的前提下,该数值越小越好,数值越小,意味着设计表时,该字段的长度比较短,节省空间

 

ref列

  表示用到了哪个表的哪个字段,如果该列值为const,表示使用了常量

 

rows列

  通过索引查到的数据个数,表中可能有很多条,但是这里显示的只是根据索引查询出来的数据个数

 

filtered列

  

Extra列

  包含不适合在其他列中显示但十分重要的额外信息  

 

posted @ 2021-09-26 08:50  方达达  阅读(44)  评论(0编辑  收藏  举报