mysql数据库SQL执行计划分析

标签:
it教育时评文化杂谈 |
分类: 数据库 |
1、什么是sql执行计划
执行计划,就是mysql如何执行一条Sql语句,包括sql查询的顺序、是否使用索引、以及使用索引的信息等,一条SQL性能的好坏,可以通过查看执行计划很直观的看出来,执行计划提供了各种查询类型与级别,方便我们进行查看以及为作为性能分析的依据。
2、sql的执行过程
数据库本身的功能架构分为三个部分,分别是 应用层、逻辑层、物理层。
应用层:这一层是和客户端打交道的,主要负责与客户端进行交互,建立链接,记住链接状态,返回数据,响应请求。
逻辑层:主要负责查询处理、事务管理等其他数据库功能处理。
物理层:实际物理磁盘上存储的文件,主要分为数据文件,日志文件。
以查询为例,首先应用层接受到查询sql之后,数据库会立即分配一个线程对其进行处理;第一步查询处理器会对SQL查询进行优化,优化后会生成执行计划;然后交由计划执行器来执行。计划执行器需要访问更底层的存储管理器,存储管理器来操作数据,他们各自的分工各有不同;最终通过调用物理层的文件获取到查询结构信息,将最终结果响应给应用层。




3、执行计划分析
在MySQL中,我们可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,如下:
explain
SELECT
FROM
WHERE
AND
AND
ORDER BY gc.dateline DESC
————————————————
表头分析:
id:表示一个查询中各个子查询的执行顺序。id相同执行顺序由上至下;id不同,id值越大优先级越高,越先被执行;id为null时表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中。
select_type:表示查询类型,常见值如下
table:输出结果集的表(表别名)
type:访问类型,常见访问类型如下:
possible_keys: 表示查询可能使用的索引
key: 实际使用的索引
key_len: 使用索引字段的长度
ref: 使用哪个列或常数与key一起从表中选择行。
rows: 扫描行的数量
filtered: 存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例(百分比)
Extra: 执行情况的说明和描述,包含不适合在其他列中显示但是对执行计划非常重要的额外信息,最主要的有一下三种