- mysql大体结构
- mysql的连接层
- sql层之解析器
- 优化器的执行
- SQL的执行流程
mysql大体结构
mysql连接层
连接层:查询最大连接:
SHOW VARIABLES LIKE '%max_conn%';
假如最大连接是200个,那1000 千个访问可能一些连接会存在短暂的延迟并不会出现特严重的阻塞问题
1.连接之后会判断用户密码的校验
2.对于校验之后的连接会进行 - 分配一个线程管理这个链接()
mysql=>连接线程=>长和短
用户连接默认是短连接=>执行完一次sql就 会进入Sleep
SHOW PROCESSLIST; # 查看当前用户连接
3.查询用户的数据库的权限=>对于表操作执行权限(系统权限)
4.返回连接的id
sql层之解析器
SQL层: SELECT * FROM count WHERE prefix = "dd1”and count < 2 and count〉0
sq1层的SQL语句接口 => 接收到由连接层所传递的SQL语句,会进行:
1.先判断SQL语句 类型(query,dml [update, delete, insert],ddl[atler], rep, status)
2.如果是query类型=>判断是否开启”查询缓存”=>相当于redis做-一个缓存
2.1开启了=>去查询缓存中命中并返回数据
3.解析器->对于SQL进行分解=>令牌分解方式=>会把sql的每一个符号都会分解成令牌
SELECT * FROM count WHERE prefix = " dd1"
SELECT * FROM count WHERE prefix = " dd1" and count<2 and count > 0
优化器
根据解析树=>选择合适的执行计划
4.1获取表的结构(字段信息,字段类型信息,存储位置,数据信息,索引信息)获取的是查询的表的信息
如果是join那就是两个表
4.2根据解析树进行条件过滤=>会过滤些没意义的查询
4.3判断执行计划(xxxx)
4.4如何执行性能是最优执行方案
这个方案不一定正确--之后在索引内容中解释