mysql数据库的sql执行计划

1、什么是sql执行计划

执行计划,就是mysql如何执行一条Sql语句,包括sql查询的顺序、是否使用索引、以及使用索引的信息等,一条SQL性能的好坏,可以通过查看执行计划很直观的看出来,执行计划提供了各种查询类型与级别,方便我们进行查看以及为作为性能分析的依据。

 2、sql的执行过程

数据库本身的功能架构分为三个部分,分别是 应用层、逻辑层、物理层。

  1. 应用层:这一层是和客户端打交道的,主要负责与客户端进行交互,建立链接,记住链接状态,返回数据,响应请求。

  2. 逻辑层:主要负责查询处理、事务管理等其他数据库功能处理。
  3. 物理层:实际物理磁盘上存储的文件,主要分为数据文件,日志文件。

以查询为例,首先应用层接受到查询sql之后,数据库会立即分配一个线程对其进行处理;第一步查询处理器会对SQL查询进行优化,优化后会生成执行计划;然后交由计划执行器来执行。计划执行器需要访问更底层的存储管理器,存储管理器来操作数据,他们各自的分工各有不同;最终通过调用物理层的文件获取到查询结构信息,将最终结果响应给应用层。

3、执行计划分析

在MySQL中,我们可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,如下:

explain
SELECT
   gc.*,u.user_name,u.head
FROM
   tb_goods_comment gc,tb_goods gd,tb_user u
WHERE
   gd.sid = 3
AND
   gc.gid = gd.gid
AND
   u.uid = gc.uid
ORDER BY gc.dateline DESC

得到下图的列表:

表头分析:

id:表示一个查询中各个子查询的执行顺序。id相同执行顺序由上至下;id不同,id值越大优先级越高,越先被执行;id为null时表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中。

select_type:表示查询类型,常见值如下:                                           

   

table:输出结果集的表(表别名)

type:访问类型,常见访问类型如下:

ALL全表扫描,遍历全表来找到匹配行,一般是没有where条件或者where条件没有使用索引
index

索引全扫描,遍历整个索引来查询匹配行,并不会扫描表,一般是查询的字段都有索引的查询语句

range索引范围扫描,常用于<、<=、>、>=、between等操作,前提是比较的字段加了索引,如果没有索引,则会全表扫描
ref使用非唯一索引或唯一索引的前缀扫描,返回匹配某个单独值的记录行
eq_ref类似ref,区别在于使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配
const/system根据主键primary key或者 唯一索引 unique index 进行的查询
NULLMySQL不用访问表或者索引,直接就能够得到结果

possible_keys: 表示查询可能使用的索引

key: 实际使用的索引

key_len: 使用索引字段的长度

ref: 使用哪个列或常数与key一起从表中选择行。

rows: 扫描行的数量

filtered: 存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例(百分比)

Extra: 执行情况的说明和描述,包含不适合在其他列中显示但是对执行计划非常重要的额外信息,最主要的有一下三种:

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值