Mysql---sql执行

说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 提交。数据才给客户端一个回应。整个流程走完。

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值