说update。跟他有关的,想到就讲,学到就讲。
常规的jdbc,加载驱动,建立连接,创建声明,执行sql,断开连接,释放资源;
java代码,建立连接。这就涉及数据的验证,连接器,用户名,密码的验证。权限一次性查询。即使权限变更,依然有效。
连接器到了mysql 服务端server这里。
分析sql语法,sql以空格形式断开,判断是否合符语法。如from 有没有 挂一个表。要不然就直接报错。near XX
优化sql。这里分析采用哪种方式执行好,性能高。比如多个索引,到底用哪个。join表,以谁作为主表合适。
explain 分析的条数是 按比例分析得出并非真实条数。
优化执行的策略都搞好了。接着就到执行的步骤了。
执行调的也就是对应的接口,比如对应innodb搜索引擎;以上的是server端的操作。
调接口,也就是拿数据。怎么拿?
搜索引擎,每个表都是以主键带领表记录的形式构建一颗树。树的节点分支个数通常会选择合理的一个数。
为什么呢?读取一次硬盘花费时间比较长。读取一次大小,刚好装全部同一分支孩子节点,才完美。要不然就浪费。
回过头来,分析怎么拿,如果刚好这个节点所在的这一分支孩子已经在内存,内存值更新为新值。那直接给server端即可。
要是不在?直接给树里面二分查找树中节点。因为基于主键,相对还是比较紧凑。且有序。树的高度,就是搜索的时间复杂度。快。定位查找到,内存值更新为新值。返回给server端。
记住这里并没有写入数据文件。也就是我们树里面。数据存一个文件。元数据结构一个。
搜索引擎会给日志写一个准备工作。也就是redo log重写日志。这是innodb特有。
redo log是物理日志,记录物理硬盘操作。
到了server端才写bin log 归档日志。也就是类似记录sql。给某某表做了啥更新。
接着才回写redo log commit 提交。数据才给客户端一个回应。整个流程走完。