SQL执行流程
- 客户端创建一个TCP连接请求,mysql服务器校验用户名和密码以及访问ip是否正确,如果正确则在连接池中获取一个连接,
- 链接再从线程池中获取一个线程来执行sql语句
- sql语句执行时先会查询缓存如果缓存中有对应的sql执行缓存则直接返回结果给客户端,没有的话则进入下一步(MYSQL8.0已取消)
- 对sql进行解析包括词法解析和语法解析,此时还会判断语法是否符合要求,不符合则会返回错误信息给客户端,解析完成后会生成一个新的语法树
- 优化器再对其进行优化,包括物理优化和逻辑优化
- 优化完成后会生成一个执行计划交给执行引擎去执行,此时执行引擎会校验用户是否有操作权限
- 最后拿到结果返回给客户端
sql每个部分的执行顺序
from 表1 cross join 表2 -> on 使用表连接条件过滤 -> (left /right) join 补全on过滤掉的主表数据 -> where 条件筛选-> group by -> having -> SELECT -> DISTINCT -> ORDER BY -> LIMIT