Mysql 执行计划
Q&A
如何写查询?
如何优化查询?
如何使用索引?
如何使用命令输出执行计划?
什么是执行计划?
MySQL逻辑架构
- 客户端
如:连接处理,授权认证,安全。。。。。。 - 核心服务
1.MySQL大多数核心服务均在这一层
2.包括查询解析、分析、优化、缓存、内置函数(时间、数学、加密。。。)
3.所有的跨存储引擎的功能也在这一层,如存储过程,触发器,视图。。。 - 存储引擎
1.负责MySQL中的数据存储和读取
2.中间的服务层通过API与存储引擎通信,这些API屏蔽不了存储引擎之间的差异。
什么是查询缓存?
对于select语句,在解析查询之前,服务器会先检查查询缓存(Query Cache),如果命中,服务器便不再执行查询解析,优化,执行的过程,而是直接返回缓存中的结果集。
- 客户端将查询发送到MySQL服务器
- 服务器先检查查询缓存,如果命中,立即返回缓存中的结果,否则进入下一个阶段
- 服务器对sql进行解析、预处理,再由优化器生成对象的执行计划
- MySQL根据优化器生成的执行计划,调用存储引擎API来执行查询。
- 服务器将结果返回给客户端,同时缓存查询结果。
执行计划
优化与执行
MySQL会解析查询,并创建内部数据结构(解析树),并对其进行各种油画,包括重写查询、决定表的读取顺序、选择合适的索引等。
用户可通过关键字提示(hint)优化器,从而影响优化器的决策过程。也可以通过优化器解释(explain)优化过程的各个因素,是用户知道数据库是如何进行优化决策的,并提供一个参考基准,便于用户重构查询和数据库表的schema(这是啥?)、修改数据库配置等,使查询尽可能高效。
(待)