Mysql大体结构
客户端
PHP、Navicat等
服务端
连接层:主要是线程管理、对程序连接的管理
sql层:解析sql,优化sql语句
存储引擎层:innodb存储引擎、myisam存储引擎
mysql的连接层
1、连接之后的用户名和密码校验
2、对于校验之后的连接进行线程分配管理
3、对于用户校验-》host校验
4、返回连接的id
-1 抛出异常
最多连接数:show variables like "%max_connections%";
查看当前用户的连接:show processlist;
对于连接长短之分:
短连接:开始连接-校验-数据查询-返回结果-关闭连接(sleep)
长连接:开始连接-校验-数据查询-返回结果。。。。关闭结果【默认8小时】
100 100=》mysql会有延迟,但是不会阻塞
select user,host,plugin from mysql.`user`
SQL层
sql的sql语句接口:接收到由连接层传递的SQL语句
select * from user where >10 and (age > 21 or sex = 0);
1.先判断下sql语句的类型
(query(select),dml(insert,update,delete),ddl(alter),status(show status) 等 )
2.假设是query
8.0之前先走缓存
8.0之后:解析器:sql解析器->语法解析器
sql解析器:
根据查询的sql语句将sql划分为小token
select,*,from,user,where,id,>,10,and,(,age,>,21,or,sex,=,0,)
得到前面分解的token,根据token去进行排列组合(关键字and or)成解析树
是根据where条件中的关键词来进行组合
优化器:
根据解析树=》选择合适的执行计划(这个计划不一定是最优的)
1.获取表结构信息(字段信息,字段的类型,存储的位置,索引信息) 获取的信息是查询表的信息,如果是join那就是两张表的信息
2.根据解析树进行条件过滤=>主要是一下没有意思的查询 1=1
3.索引信息 来确定/判断执行计划
4.执行计划 在索引已经条件等过滤