【数据库】mysql执行计划

目录

执行计划参数与解释

1.id        表示SQL执行顺序

2.select_type        表示查询中每个select子句的类型

        1.SIMPLE

        2.PRIMARY

        3.SUBQUERY

        4.DERIVED

        5.UNION

        6.UNION RESULT

3.table        显示这一步所访问的表名称

4.type        对表的访问方式

        1.ALL

        2.index

        3.range

        4.ref

        5.eq_ref

        6.const

        7.system

5.possible_keys        列出涉及到的字段上存在的索引

6.key        实际使用的索引

7.key_len        表示索引使用的字节数,根据这个只可以判断索引的使用情况

8.ref        显示索引的哪一列被使用了

9.rows        找到所需记录所需要的行数

10.extra        对查询所获的结果集排序的结果

        using filesort

        using index

        using tempporary

        using where


mysql执行计划就是解释当mysql执行查询语句的时候是如何在数据库中执行的、相关表是如何连接的、连接次序、有哪些索引和索引的具体使用情况、每个表的扫描数据量等等

可以通过这些数据来分析selelct语句的执行情况,从而对select语句进行优化

用法

explain +语句

执行计划参数与解释

我们可以看到参数有id,select_type,table,partition,type,possible_keys,key,key_len,ref,rows,filtered,Extra参数

1.id        表示SQL执行顺序

表示SQL执行的顺序,具体是根据一下规则

        当id相同时,执行顺序由上至下

        如果是子查询,id的序号会递增,id的值越大执行优先级越高,越先被执行

2.select_type        表示查询中每个select子句的类型

主要作用是区分普通查询、联合查询、子查询等复杂查询

        1.SIMPLE

                简单的select查询,查询中不包含子查询或者union

        2.PRIMARY

                查询中包含然和复杂的字部分嘴歪成查询则被标记为primary(嵌套查询的外部)

        3.SUBQUERY

                在select或where列表中包含了子查询

        4.DERIVED

                在from列表中包含子查询被标记为derived(衍生),mysql或递归执行这些子查询,将结果放在临时表里

        5.UNION

                若第二个select出现在union之后,则被标记为union,若union宝还在from子句的子查询中,外层select将被标记为drived

        6.UNION RESULT

                从union表获取结果的select

3.table        显示这一步所访问的表名称

4.type        对表的访问方式

常用的类型有:ALL、index、range、ref、eq_ref、const、system(从左到右,性能从差到好)

        1.ALL

                MySQL将遍历全表以找到匹配的行(遍历所有的记录)

        2.index

                index与ALL区别为index类型只遍历索引树(遍历所有的索引)

        3.range

                只检索给定范围内的行,使用一个索引来选择行(between,>,<)(可能使用多个索引)

        4.ref

                表示非唯一索引扫描,返回所有匹配的值(仅用一个索引,并且可能会回表)

        5.eq_ref

                类似ref,区别就在于使用的索引是唯一索引,对于每个索引的值,表中只有一条记录匹配(使用primary key或者unique key作为关联条件)(仅用一个索引,并且可能会回表)

        6.const

                通过索引一次命中,匹配一行数据(也就是说通过索引一次就找到了又且仅有一条的数据)

        7.system

                表中只有一行记录,相当于系统表(也就是说这个表里只有一条数据,一次就找到了数据)

5.possible_keys        列出涉及到的字段上存在的索引

        查询涉及到的字段上存在的索引,索引将会被列出,但是不一定被查询实际使用

6.key        实际使用的索引

        如果为NULL,则没有使用索引

7.key_len        表示索引使用的字节数,根据这个只可以判断索引的使用情况

        表示用到所有的索引的字节数之和(?),key_len越小,说明索引效果越好

8.ref        显示索引的哪一列被使用了

        如果可能,是一个常量const

9.rows        找到所需记录所需要的行数

10.extra        对查询所获的结果集排序的结果

        using filesort

                表示mysql对结果集进行外部排序,不能通过索引顺序达到排序效果,一般有的话都建议优化去掉,因为这样的查询对cou资源消耗大,延时大(不根据索引排序)

        using index

                覆盖索引扫描,表示查询在索引树中就可以查找所需数据,不用扫描表数据文件,往往说明性能不错(根据索引就能排序)

        using tempporary

                查询有使用临时表,一般出现于排序,分组和多表join的情况,查询效率不高,建议优化(使用临时表)

        using where

                sql使用了where过滤,效率较高

 参考文章

MySQL中SQL执行计划,你理解了吗?

膜拜!华为大牛透彻讲解Java面试100道必考题,不管你工作几年,都得看看!现在免费分享给大家!_哔哩哔哩_bilibili

MySQL Explain详解 - 杰克思勒(Jacksile) - 博客园

mysql的sql执行计划详解_360linker-CSDN博客_sql执行计划详解

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值