查询流程:
1.当客户端连接到 MySQL 服务器时,服务器对其进行认证。可以通过用户名与密码认证,也可以通过 SSL 证书进行认证。登录认证后,服务器还会验证客户端是否有执行某个查询的操作权限。
2.在正式查询之前,服务器会查询缓存,如果能找到对应的查询,则不必进行查询解析,优化,执行等过程,直接返回缓存中的结果集。
3.mysql解析器使用mysql语法规则验证和解析查询。生成一颗对应的解析树。(验证关键字是否错误,关键字的顺序,引号可否匹配?)
4.mysql的预处理器进一步检查解析树是否正确(字段和表是否存在?名字别名是否歧义?)
5.语法树合格了,优化器将其转化成执行计划,并选取最好的执行计划。(mysql的执行计划是数据结构,并不像其他的db是字节码)
6.根据执行计划的指令逐步执行。大量的操作调用存储引擎实现的接口来完成(handle API)每一张表对应一个handler实例,优化器根据实例的接口获取表的各种信息。底层几十个接口实现了查询的操作(例如 通过查询某索引第一行的接口与查询某索引下一行的接口就可以实现一个全索引扫描的功能)
7.逐步将结果集返给客户端。在返回给客户端的同时,会将数据存在查询缓存中。
网友评论