MySQL 的架构以及内部模块
1 连接器
主要负责用户登录数据库,进行用户的身份认证,包括校验账户密码,权限等操作,如
果用户账户密码已通过,连接器会到权限表中查询该用户的所有权限。
如果账号密码不对,就会抛出 Access denied for user 的异常。
如果账号密码正确,连接器就会读取当前用户此时所拥有的的权限,值得注意的是,在
连接过程中,即使你用管理员账号修改当前用户的权限,丝毫不会影响它在本次连接的权限,
你的修改需要等到下次连接才会生效。
如果你长时间没有操作数据库,这个连接自动断开,这个时间默认是 8 小时。这个时
候你要操作数据库就必须重连。
2 查询缓存
连接建立后,执行查询语句的时候,会先查询缓存,Mysql 会先校验这个 sql 是否执行
过,以 Key-Value 的形式缓存在内存中,Key 是查询预计,Value 是结果集。如果缓存 key 被
命中,就会直接返回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓
存起来,方便下一次调用。当然在真正执行缓存查询的时候还是会校验用户的权限,是否有
该表的查询条件。
Mysql 查询不建议使用缓存,因为对于经常更新的数据来说,缓存的有效时间太短了,
往往带来的效果并不好,对于不经常更新的数据来说,使用缓存还是可以的,Mysql 8.0 版
本后删除了缓存的功能,官方也是认为该功能在实际的应用场景比较少,所以干脆直接删掉
了。
3 分析器
Mysql 没有命中缓存,那么就会进入分析器,分析器主要是用来分析 SQL 语句是来干嘛的,分析器也会分为几步:
第一步,词法分析,一条 SQL 语句有多个字符串组成,首先要提取关键字,比如 select,
提出查询的表,提出字段名,提出查询条件等等。做完这些操作后,就会进入第二步。
第二步,语法分析,主要就是判断你输入的 sql 是否正确,是否符合 mysql 的语法。
4 优化器
优化器的作用就是它认为的最优的执行方案去执行(虽然有时候也不是最优),比如多
个索引的时候该如何选择索引,多表查询的时候如何选择关联顺序等
5 执行器
当选择了执行方案后,mysql 就准备开始执行了,首先执行前会校验该用户有没有权限,
如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的
结果