MySQL执行计划解析

Mysql 执行计划

Q&A

如何写查询?

如何优化查询?

如何使用索引?

如何使用命令输出执行计划?

什么是执行计划?

MySQL逻辑架构

  • 客户端
    如:连接处理,授权认证,安全。。。。。。
  • 核心服务
    1.MySQL大多数核心服务均在这一层
    2.包括查询解析、分析、优化、缓存、内置函数(时间、数学、加密。。。)
    3.所有的跨存储引擎的功能也在这一层,如存储过程,触发器,视图。。。
  • 存储引擎
    1.负责MySQL中的数据存储和读取
    2.中间的服务层通过API与存储引擎通信,这些API屏蔽不了存储引擎之间的差异。

什么是查询缓存?

对于select语句,在解析查询之前,服务器会先检查查询缓存(Query Cache),如果命中,服务器便不再执行查询解析,优化,执行的过程,而是直接返回缓存中的结果集。

mysql 查询过程

  • 客户端将查询发送到MySQL服务器
  • 服务器先检查查询缓存,如果命中,立即返回缓存中的结果,否则进入下一个阶段
  • 服务器对sql进行解析、预处理,再由优化器生成对象的执行计划
  • MySQL根据优化器生成的执行计划,调用存储引擎API来执行查询。
  • 服务器将结果返回给客户端,同时缓存查询结果。

执行计划

优化与执行

MySQL会解析查询,并创建内部数据结构(解析树),并对其进行各种油画,包括重写查询、决定表的读取顺序、选择合适的索引等。
用户可通过关键字提示(hint)优化器,从而影响优化器的决策过程。也可以通过优化器解释(explain)优化过程的各个因素,是用户知道数据库是如何进行优化决策的,并提供一个参考基准,便于用户重构查询和数据库表的schema(这是啥?)、修改数据库配置等,使查询尽可能高效。

(待)