对表上的更新 , 会让该表所有的缓存全部失效 。
大多数情况下不建议使用缓存 , 缓存的弊远远大于利 。MySQL8.0以后直接把查询缓存的功能进行了移除 。
分析器MySQL Server在拿到SQL语句以后 , 需要知道这条语句干什么 。
select id from test;
- 分析器做词法分析:需要把一长串字符串进行识别 , 比如上述语句需要将select识别出来 , 这是一个查询语句;test是表名 , id是列名
- 词法分析完成以后会做语法分析 , 语法分析器会根据语法规则判断该SQL语句是否合法
优化器在经过分析器以后 , MySQL Server已经知道想要干啥 , 但是怎么干 , 如何干才能更快 , 此时就需要借助优化器了 。
优化器会在有多个索引时决定使用哪个索引 , 或者有多表关联时决定各个表的连接顺序 。
执行器MySQL Server通过分析器知道要干啥 , 通过优化器知道怎么干 , 于是到达了执行器开始干 。
但是在开始干之前需要检查一下权限 , 如果权限校验不通过就会返回没有权限的错误 , 如下图:
文章插图
如果权限校验通过 , 就打开表继续执行 。打开表会根据表的引擎定义去调用引擎提供的接口 。
select * from test where id = 1;
假设上述表没有索引 , 引擎是InnoDB , 执行器会这样操作:- 调用InnoDB引擎接口获取表的"第一行" , 判断ID是否为1 , 如果不是则跳过 , 是就将这一行存入结果集
- 调用引擎接口取"下一行" , 重复第一步的逻辑判断 , 直到取完表的"最后一行"
- 执行器将满足条件的行的结果集返回给客户端 。
推荐阅读
- 我的漂亮的 Linux 开发环境
- canal+Kafka实现mysql与redis数据同步
- cpolar——安全的内网穿透工具
- 用分布式Ddos攻击原理教你如何让你的同行倒闭
- Python中的property属性
- 买电脑,应该关心的6个配置!哪种电脑不能买?
- CSS变量 var的用法是什么?CSS变量 var()的用法详解
- 重装系统保存在桌面的文件怎么恢复?重装系统可以保留文件吗?
- 一次完整的渗透测试&仅供学习研究
- 物理内存的组织方式:每个页面都有一个结构,每一个都有节点