MySQL学习笔记二:MySQL的基础架构

MySQL可以分为两大部分,一个是Service层,一个是引擎层。

Service层:

        公共部分,所有引擎共享,涵盖了MySQL的大部分功能,以及所有的内置函数。它又分为四个部分:连接器、查询缓存(MySQL8.0之后已经去除,效果不好,还占内存)、分析器、优化器、执行器。

1. 连接器

        链接数据库,校验用户名、密码,加载用户权限。

        用户登陆后,即使权限发生变更,也不会立即生效,而是在下次登陆后生效。

        链接分为两种:长连接和短链接。

        建议使用长连接。

        长连接也有缺陷,长时间使用后,它会把查询的数据、以及操作(undo-log)放在内存中,会造成内存急速增长,导致数据库异常重启。

        处理方式:在适当的时候初始化长连接、或者定期断开长连接。

2. 查询缓存(8.0之后就没有了)

        MySQL得到一个查询请求之后,会先到缓存中查询,没有找到,再去磁盘上找。找到后,先放入缓存,在返回查询信息。

        一张表如果发生的变动,那么当前表上的查询缓存会全部作废。

        相当于你费尽心力做完了事情,用的时候发现已经失效了,然后在做一遍,再去用的时候还是失效。

        这样一直做,就显得很呆。

3. 分析器

        分两个步骤:词法分析、语法分析。

        1. 词法分析:分析SQL语句中的单词,校验表名和列名。

        2. 语法分析:校验你的SQL语句是不是正确,错了的话你会看见【You have an erro in your SQL……】,错误提示会放在语句的第一个错误处。

4. 优化器

        对SQL语句分析完成后,优化器会判断是否使用了索引。

        如果存在多个索引,它会挑选使用哪个。

        如果存在多表,它会选择表的链接顺序。

        并不是说你写一个join in 或者and 就按你的来。

        例:a.id = 1 and b.id =10,可以取表a中id = 1 的数据去匹配表b中id=10的数据,也可以反着来。

5.执行器

        执行之前,校验当前用户是否有权限操作涉及的表

        没有权限就报错。

        权限通过就会打开当前表,根据表定义的引擎,调用对应的引擎方法。

        没有索引,就会调取当前表的第一行,再判断条件,符合就放入结果集,不符合跳过,一直到表的最后一行。

        有索引,就会把满足条件的数据放入结果集,不是遍历全表(具体做法等我学了索引之后再写)。

引擎层

        MySQL的引擎是以插件形式存在的。

        当前默认引擎是InnoDB(5.5版本后),它不是一个官方引擎。

        因为InnoDB的redo-log(物理日志),它成为了默认引擎。

                                                                                                                     ----今天的姿势又增加了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值