mysql执行计划

mysql执行计划

执行计划:就是sql查询的顺序,以及如何使用索引查询,返回的结果集的行数

EXPLAIN select * from user where username='neo'

  • id: 查询的序号,有几个select就显示几行,id时按照select出现的顺序增长的,id列的值越大执行的优先级越高

  • selectType:查询中每个select子句的类型

    • simple: 查询中不包含子查询和union查询
    • promary:此查询是最外层查询(包含子查询)
    • subquery:子查询中的第一个select
    • union:此查询是union的第二或随后的查询
    • dependent union:union中是第二个或后面的查询语句,取决于外面的查询
    • union result: union的结果
    • dependent subquery:子查询中的第一个select, 取决于外面的查询,即子查询依赖于外层查询的结果
    • derived:衍生,导出表的select
  • type:判断索引有没有命中,并且走的是哪一中索引。sql优化的重要字段,是我们判断sql性能和优化程度的重要指标。

    • system:表中只有一行记录,比如系统表,一次命中

    • const:通过索引一次命中,匹配一行数据。性能高

    • eq_ref: 使用唯一索引,并命中,即表中只有一条数据与之匹配,效率高。可能会回表,因为不是主键。

    • ref: 使用非唯一索引扫描,命中多个匹配的结果,可能会回表

    • range:使用一个索引来检索给定范围的行,一帮用于between,<, >

    • index:遍历索引树,即遍历所有索引,效率低

    • all: 全表扫描,性能差

      执行效率:system > const > eq_ref > ref > range > index > all

  • table:查询的表

  • partitions:有分区表的话,打印分区表的信息

  • possible_keys: 可能会走的索引

  • key:真正走的索引名字

  • key_len:联合字段索引命中的长度

  • ref:命中索引的字段名

  • rows:执行计划的读取的数据量,越少越优

  • filtered:过滤,百分比,返回数据占读取行数的比例,越高越好(读取的数据更有意义)

  • extra:

    • using_filesort: 结果集需要外部索引,无法通过索引排序的顺序得到正确结果
    • using_index:是覆盖索引,覆盖索引说明通过在索引树总就可以查找到所需要的数据,不需要回表扫描表数据文件,说明性能较好
    • using temporary: 是否有临时表,如查询时的多表join情况,说明检索效率不高,建议优化
    • using where: 使用where过滤,效率较高
posted @ 2022-03-27 14:31  言思宁  阅读(121)  评论(0编辑  收藏  举报