下面是MySQL 的基本架构示意图:
server层:
连接器:
建立连接,假设你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限,只有再新建的连接才会使用新的权限设置。
查询缓存:
MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。大多数情况下我会建议你不要使用查询缓存。为什么呢?后面讲。
分析器:
对SQL进行语法分析和词法分析。
优化器:
在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联时,决定各个表的连接顺序。
执行器:
检查有没有执行查询的权限,如果没有,就会返回没有权限的错误,如果有,就继续执行。
存储引擎层:
负责数据的存储和提取。
为什么不建议开启查询缓存呢?
因为查询缓存往往弊大于利。只要有对一个表的更新,这个表上所有的查询缓存都会被清空,查询缓存的失效非常频繁。因此很可能你还没使用呢,就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长时间才会更新一次。比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。 MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 开始彻底没有这个功能了。