您好,欢迎来到爱够旅游网。
搜索
您的当前位置:首页疏漏总结(二十三)

疏漏总结(二十三)

来源:爱够旅游网

change buffer的最主要目的是将二级缓存的结果保存下来,减小二级索引随机IO的延迟与消耗,这里注意二级索引和聚簇索引又不一样,因为二级索引有可能是不唯一的。

当我们执行更新语句的时候,像insert update delete这种语句,在使用了之后,会更新二级索引,这对IO上的消耗是很大的, 所以change buffer就对这个结果进行了一个缓存,减少IO消耗。

而当我们执行需求的时候,change buffer的结果会直接同步到buffer pool中,注意,这些都是在内存上的操作,但是等系统空闲的时候会自动写入硬盘。

但是如果我们对二级索引的使用概率不高,那么就可以不用去使用,也是有一定资源消耗的,毕竟change buffer更适用于频繁写入的操作.

  1. b+树对范围查询好 MongoDB b树单次查询要好 InnoDB

InnoDB的数据结构是b+树,b+树相对于b树,除了几个基本的区别以外,在性能上,b+树对于范围查询的效果更好,b树单词查询的效果要好,因为非叶子节点也有数据,直接就能查到返回了,而MongoDB就是用的这种数据结构,也是考虑到了查询的特点。

  1. insert 语句执行的过程

介绍之前,先说一下redo log 和 bin log

  • redo log

这个log,主要是去记录你之前的一些sql操作,属于物理日志,用于crash-safe的时候,可以用redo log 去进行一个恢复操作。当我们做一个更新操作的时候,会先写入redo log,然后再写入内存,然后空闲的时候写入硬盘

  • bin log

这个log实际上是一个逻辑日志,和redo log这种物理日志不一样,也就是说,存储的都是一些,你实际操作的行为,而不是sql语句,bin log是mysql Server本来就持有的功能,它本身属于一个append log,追加写,不会被覆盖。

那么我们在执行一个更新操作的时候,首先会将更新的记录放进redo log,然后这个时候,redo log处于prepare的状态,等执行器执行结束之后,就commit transaction,然后会将bin log写入到硬盘,在执行器调用引擎提交事务之后,会把写入的redo log进行commit,然后就更新完成了。

  1. 意向锁

意向锁主要是来解决非意向锁的一些问题的,意向锁分为意向共享锁和意向排它锁,他们都是表级锁,而且都是互相兼容的,但是单纯的共享锁和排它锁,只有共享+共享是兼容,其他都是不兼容的,我们使用意向共享锁是lock in share mode而使用意向排他锁是for update 用法都是一样的,但是要注意的是,单纯的共享锁和排它锁,有表级和行级两种,如果要是表级的IS和IX和行级的SX,那就不会冲突,但是如果是表级的IS IX 和表级的S X,那就会冲突。

意向锁存在的意义就在于,解决事务隔离的基础上,做到了行级锁和表级锁共存。

  1. 1开头的状态码

1开头的状态码是表示服务端希望客户端继续发送请求,意思就是客户端现在属于一种中间的状态,需要继续发送请求到达下一个状态。

  1. mysql倒排索引

倒排索引:整体的结果利用关键字建立起一个hash表,然后直接搜索关键字就可以得到结果,就是倒排索引。

mysql的倒排索引是基于全文索引的。在创建InnoDB索引的时候会默认创建一张全文索引表。存储位置信息和id(索引内容)

  1. String.intern()

检查常量池是否有这个String,有就直接返回,没有就先加入到常量池然后再重新返回

  1. @transaction注解在方法上,同一个类里面的另一个方法调用它,事务能生效吗

不生效,因为代理不会被触发

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务