1、客户端发送一条查询给服务器
2、服务器会检查查询缓存,如果缓存中存在则会校验权限,如果权限通过将直接返回结果
3、如果缓存中不存在则通过解析器进行sql解析,解析sql语法是否存在错误,如果错误会停止查询
4、通过预处理器,检查数据库列、数据表是否存在,解析别名是否有歧义
5、再由优化器进行查询优化,主要是将SQL转化为执行计划,一条SQL有多种执行方式,查询优化器就是为了找到代价最低的那一条方式,生成执行计划
6、mysql根据查询计划,调用存储引擎api来执行查询
7、将结果返回客户端
ps:查询缓存
在解析查询SQL的时候,如果这个查询是打开的,那么MySQL会优先在缓存中查询该SQL是否命中,这个过程是一个大小写敏感的过程,即使只有一个字节不同,也不会命中缓存,如果恰好命中了缓存,则下一步不是返回结果,而是查看权限是否有问题,如果检测权限有问题,则不会返回结果,如果权限没有问题,则会返回结果给客户端。这一点很重要,需要保持谨慎。