客户端:PHP JAVA Navicat
服务端:
连接层:主要用于程序的连接
- 判断用户密码校验
- 校验后会分配一个线程管理这个连接
- 查询用户的权限=》对表的操作权限
- 返回连接的id
优化器+解析器+查询缓存=》 sql层:处理优化的sql语句,有自己的执行计划
- 先判断sql的语句类型(query,dml【update,insert,delete】,ddl【alter】修改表的语句),rep,status 查询表的状态
- 如果是query类型,判断是否开启缓存,命中缓存 ,直接返回缓存
- 没有命中缓存,解析器会把sql分成令牌
语法解析器:根据得到的令牌组装成对应的解析数据结构 =》where条件
优化器:根据得到的解析树=》选择合适的执行计划
- 获取表的结构
- 根据解析树过滤=》过滤没意义的查询 where 1=1
- 判断查询计划